telefon komórkowy jako modem gprs przez bluetooth

Jak oceniasz tę solucję?

Wogóle nie wiem o co w tym chodzi.
14
44%
Wogóle nie wiem o co w tym chodzi.
4
13%
Wogóle nie wiem o co w tym chodzi.
11
34%
Wogóle nie wiem o co w tym chodzi.
3
9%
 
Liczba głosów: 32
ixcesal

telefon komórkowy jako modem gprs przez bluetooth

Post autor: ixcesal » 08 wrz 2006, 00:58

Poniższy opis powstał w wyniku konieczności użycia telefonu SE K700i jako modemu.
Brak jednoznacznego opisu w sieci, zmusił mnie do wysiłku intelektualnego (do tej pory pracowałem tylko na FreeBSD).
Korzystając z dwóch artykułów w sieci:
- Of Linux, GPRS Phones, Serial Cable, Irda, Bluetooth and USB
Mikko Rapeli

- SZARP HOWTO: SZARP v2.2 + Debian/Red Hat - 7.15.14. Łączenie się z Internetem przez GPRS
udało mi się zmusić Ubuntu do łączenia z netem przez gprs via bluetooth.

A więc po kolei.

1. Wszystkie operacje wykonałem na świerzo zainstalowanym Ubuntu 6.06 LTS na "smaku" Kubuntu
2. Po włożeniu klucza Bluetooth do usb, otrzymałem piękny komunikat iż został on wykryty
3. Telefon komunikuje się przez ObexFile transfer, jednakże ikona dialup w menu Bluetooth nie pozwala na wykonanie sensownej akcji (ja się na tym nie znam, pierwszy raz siedzę pod Linuxem)
4. pod konsolą wbijamy polecenie:

Kod: Zaznacz cały

# hciconfig
w odpowiedzi otrzymujemy coś w rodzaju:

Kod: Zaznacz cały

hci0:   Type: USB
        BD Address: 00:11:67:05:4B:1E ACL MTU: 678:8 SCO MTU: 48:10
        UP RUNNING PSCAN ISCAN
        RX bytes:1077766 acl:4908 sco:0 events:4001 errors:0
        TX bytes:308521 acl:3013 sco:0 commands:82 errors:0
znaczy bluetooth działa.

5. Włączamy bluetooth w telefonie, pod konsolą wbijamy:

Kod: Zaznacz cały

# hcitool inq
w odpowiedzi otrzymujemu:

Kod: Zaznacz cały

Inquiring ...
       Inquiring ...
       00:12:62:D4:97:0D     clock offset: 0x13e4    class: 0x502204
Otrzymany adres jest adresem naszego telefonu. W przypadku, gdy nie otrzymamy go w wyniku powyższej komendy, należy wyłączyć bluta w telefonie i włączyć go ponownie, można zrestartować również bluta pod Ubuntu. U mnie odpowiedź pojawiła się za drugim razem.

6. Dla pewności wbijamy:

Kod: Zaznacz cały

# l2ping 00:12:62:D4:97:0D
podając oczywiście adres uzyskany w poprzednim kroku,
w odpowiedzi możemy spodziewać się mniej więcej czegoś takiego:

Kod: Zaznacz cały

Ping: 00:12:62:D4:97:0D from 00:11:67:05:4B:1E (data size 44) ...
0 bytes from 00:12:62:D4:97:0D id 0 time 514.95ms
0 bytes from 00:12:62:D4:97:0D id 1 time 8.22ms
0 bytes from 00:12:62:D4:97:0D id 2 time 9.07ms
0 bytes from 00:12:62:D4:97:0D id 3 time 7.87ms
0 bytes from 00:12:62:D4:97:0D id 4 time 8.70ms
5 sent, 5 received, 0% loss
znaczy się pakiety między kompem a telefonem fruwają.

7. wbijamy:

Kod: Zaznacz cały

# sdptool search DUN
i uzyskujemy coś takiego:

Kod: Zaznacz cały

Inquiring ...
Searching for DUN on 00:11:67:05:4b:1e ...
Service Name: Dial-Up Networking
Service RecHandle: 0x10005
Service Class ID List:
  "Dialup Networking" (0x1103)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x454e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100
informacja ta potwierdza istnienie usługi Dialup w naszym telefonie, zapamiętujemy z tego jedynie parametr Channel (w powyższym przypadku Channel=1)

8. Edytujemy plik /etc/bluetooth/rfcomm.conf powinien wyglądać mniej więcej tak:

Kod: Zaznacz cały

rfcomm0 {
  bind yes;
#       # Bluetooth address of the device
        device 00:12:62:D4:97:0D;
#       # RFCOMM channel for the connection
        channel 1;
#       # Description of the connection
        comment "moj telefon";
}
Jako Device podajemy adres wykrytego wcześniej telefonu (pkt 5), jakko channel parametr z punktu 7.

9. Sprawdzamy zawartość pliku /etc/bluetooth/pin, zapamiętujemy lub zmieniamy i też zapamiętujemy

10. Wykonujemy:

Kod: Zaznacz cały

# /etc/init.d/bluez-utils restart
to powinno zrestartować bluta w kompie

11. Wykonujemy:

Kod: Zaznacz cały

# rfcomm
otrzymujemy coś takiego:

Kod: Zaznacz cały

rfcomm0: 00:12:62:D4:97:0D channel 1 clean
to dobry znak. adres telefenu sparował się z interfejsem rfcomm0

12. Aby operacja ta wykonywała się przy każdym starcie systemu możemy wykonać:

Kod: Zaznacz cały

# ln -s /etc/init.d/bluez-utils /etc/rc5.d/K90bluetooth
13. Teraz przystąpmy do konfiguracji połączenia z siecią orange, oczywiście analogicznie można skonfigurować połączenie dla ery lub plusa.
Najważniejsze informacje:

Plus APN: "www.plusgsm.pl" (użytkownik: brak, hasło: brak).
Idea APN: "www.orange.pl" lub "www.idea.pl" (użytkownik: ppp, hasło: ppp).
Era APN: "erainternet" (użytkownik: erainternet, hasło: erainternet).

W przypadku korzystania z innej sieci niż orange, należy zamienić w poniższych plikach odpowiadające sobie wpisy (tzn, adres APN, usera i hasło).

Zaczynamy od utworzenia: /etc/ppp/peers/gprs

Kod: Zaznacz cały

# File: gprs
#
# Description:
# Serial cable, IrDA, Bluetooth and USB pppd options for GPRS phones.

# Keep pppd attached to the terminal:
# Comment this to get daemon mode pppd
#nodetach
updetach
# Opcja updatach oznacza, ze pppd odlaczy sie od terminala dopiero
# gdy zostanie nawiazane polaczenie.

# Debug info from pppd:
# Comment this off, if you don't need more info
debug

# Show password in debug messages
show-password

# Connect/Disconnect scripts:

connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs-connect-chat"

disconnect "/usr/sbin/chat -v -f /etc/chatscripts/gprs-disconnect-chat"

# Serial device to which the GPRS phone is connected:
# /dev/ttyS0 for serial port (COM1 in Windows), 
#/dev/ircomm0 
# /dev/ircomm0 for IrDA,
#/dev/ttyUB0 for Bluetooth (Bluez with rfcomm running) and
# /dev/ttyUSB0 for USB
#/dev/ttyS0     # serial port one
#/dev/ttyS1     # serial port two
#/dev/ircomm0   # IrDA serial port one
/dev/rfcomm0   # Bluetooth serial port one
#/dev/ttyUSB0   # USB serial device, for example Orange SPV

# Serial port line speed
115200 # fast enough
#57600   # perhaps usefull with IrDA

# Hardware flow control:
# Use hardware flow control with cable, Bluetooth and USB but not with IrDA.
crtscts  # serial cable, Bluetooth and USB
#nocrtscts # IrDA

# Ignore carrier detect signal from the modem:
local

# IP addresses:
# - accept peers idea of our local address and set address peer as 10.0.0.1 
# (any address would do, since IPCP gives 0.0.0.0 to it)
# - if you use the 10. network at home or something and pppd rejects it,
# change the address to something else 
:10.0.0.1

# pppd must not propose any IP address to the peer!
noipdefault

# Accept peers idea of our local address
ipcp-accept-local

# Add the ppp interface as default route to the IP routing table
defaultroute

# DNS servers from the phone:
# some phones support this, some don't.
usepeerdns

novj
nobsdcomp
novjccomp
nopcomp
noaccomp

# The phone is not required to authenticate:
noauth

# Username and password:
# If username and password are required by the APN, put here the username 
# and put the username-password combination to the secrets file: 
# /etc/ppp/pap-secrets for PAP and /etc/ppp/chap-secrets for CHAP 
# authentication. See pppd man pages for details.
# Example, Radiolinja operator pap-secrets: 
# "rlnet"         *       "internet"    *
user "ppp"

# Asyncmap:
# some phones may require this option.
#asyncmap 0xa0000

# No magic:
# some phones may require this option.
#nomagic

# Require PAP authentication:
# some phones may require this option.
#require-pap
14. Tworzymy plik /etc/chatscripts/gprs-connect-chat

wersja dla nokii (sprawdzałem na 6230)

Kod: Zaznacz cały

# File: gprs-connect-chat
#
# Description: 
#
# Set PDP context CID=1, protocol=IP, APN=internet:
# AT+CGDCONT=1,"IP","internet","",0,0
#
# Set CID=1 QoS requirements from the network, not supported by Nokia:
# AT+CGQREQ=1,0,0,0,0,0
#
# Set CID=1 minimum acceptable QoS parameters, not supported by Nokia:
# AT+CGQMIN=1,0,0,0,0,0
#
# 'Call' CID=1 (activate PDP context one, perform GPRS attach):
# ATD*99***1#
#
# Some phones like the Orange SPV (yes, the Microsoft Smartphone) use this 
# dial string to start GPRS connection:
# ATD*99#
#
# The actual chat script:

TIMEOUT         5
ECHO            ON
ABORT           '\nBUSY\r'
ABORT           '\nERROR\r'
ABORT           '\nNO ANSWER\r' 
ABORT           '\nNO CARRIER\r'
ABORT           '\nNO DIALTONE\r'
ABORT           '\nRINGING\r\n\r\nRINGING\r'
''              \rAT
TIMEOUT         12
SAY             "Press CTRL-C to close the connection at any stage!"
SAY             "\ndefining PDP context...\n"
OK              ATH
OK              ATE1
OK              'AT+CGDCONT=1,"IP","www.idea.pl"'
OK              ATD*99***1#
TIMEOUT         22
SAY             "\nwaiting for connect...\n"
CONNECT         ""
SAY             "\nConnected."
SAY             "\nIf the following ppp negotiations fail,\n"
SAY             "try restarting the phone.\n"

wersja dla ericssonów (sprawdzałem na k700i)

Kod: Zaznacz cały

# File: gprs-connect-chat
#
# Description: 
#
# Set PDP context CID=1, protocol=IP, APN=internet:
# AT+CGDCONT=1,"IP","internet","",0,0
#
# Set CID=1 QoS requirements from the network, not supported by Nokia:
# AT+CGQREQ=1,0,0,0,0,0
#
# Set CID=1 minimum acceptable QoS parameters, not supported by Nokia:
# AT+CGQMIN=1,0,0,0,0,0
#
# 'Call' CID=1 (activate PDP context one, perform GPRS attach):
# ATD*99***1#
#
# Some phones like the Orange SPV (yes, the Microsoft Smartphone) use this 
# dial string to start GPRS connection:
# ATD*99#
#
# The actual chat script:

TIMEOUT         5
ECHO            ON
ABORT           '\nBUSY\r'
ABORT           '\nERROR\r'
ABORT           '\nNO ANSWER\r' 
ABORT           '\nNO CARRIER\r'
ABORT           '\nNO DIALTONE\r'
ABORT           '\nRINGING\r\n\r\nRINGING\r'
''              \rAT
TIMEOUT         12
SAY             "Press CTRL-C to close the connection at any stage!"
SAY             "\ndefining PDP context...\n"
OK              ATH
OK              ATE1
#OK              'AT+CGDCONT=1,"IP","www.idea.pl"'
OK              ATD*99*www.idea.pl**1#
TIMEOUT         22
SAY             "\nwaiting for connect...\n"
CONNECT         ""
SAY             "\nConnected."
SAY             "\nIf the following ppp negotiations fail,\n"
SAY             "try restarting the phone.\n"

15. Tworzymy plik /etc/chatscripts/gprs-disconnect-chat

Kod: Zaznacz cały

# File: gprs-disconnect-chat
#
# send break
exec /usr/sbin/chat -V -s -S
ABORT           "BUSY"
ABORT           "ERROR"
ABORT           "NO DIALTONE"
SAY             "\nSending break to the modem\n"
""              "\K"
""              "+++ATH"
SAY             "\nPDP context detached\n"

16. Tworzymy plik /etc/ppp/chap-secrets

Kod: Zaznacz cały

# Secrets for authentication using PAP
# client        server  secret                  IP addresses
"ppp" * "ppp" *
17. Tworzymy plik /etc/ppp/ip-up.local

Kod: Zaznacz cały

mv /etc/resolv.conf /etc/resolv.conf-pppbackup
cp -f /etc/ppp/resolv.conf /etc/resolv.conf
chmod a+r /etc/resolv.conf
oraz plik /etc/ppp/ip-down.local

Kod: Zaznacz cały

mv /etc/resolv.conf-pppbackup /etc/resolv.conf
18. W przypadku gdy używamy nokii, w pliku /etc/ppp/options należy zakomentować wpis:

Kod: Zaznacz cały

#lcp-echo-failure 4
Powyższa czynność zapobiega rozłączaniu się Nokii po ok. dwóch minutach użytkowania neta.
W przypadu K700 nie stwierdziłem takiego zjawiska.
Oczywiście jeżeli inne aparaty będą rozłączały połączenie należy również wykonać powyższą operację.

19. W telefonie wyszukujemy urządzeń Bluetooth, na liście powienien pojawić się nasz komputer, dodajemy go do urządzeń zaufanych używając kodu pin określonego w punkcie 9.
W przypadku Nokii warto również zaznaczyć opcję łączenia z urządzeniem bez potwierdzania.

20. Wykonujemy komendę

Kod: Zaznacz cały

# pppd call gprs
... w tacce systemowej zaczyna migać ikona bluta, a telefon powinien po chwili pokazać komunikat o nawiązywaniu połączenia gprs.



Zaznaczam, że wszystkie opisane tu czynności wykonałem mając pierwszy raz styczność z linuksem, co więcej mając spore doświadczenie w sieciach, wstyd się przyznać nie miałem okazji samodzielnie konfigurować modemu.

Pierwszą konfigurację wykonałem dla K700, po zmianie telefonu na Nokię 6230 wystąpiły błędy w skrypcie nawiązywania komunikacji z modemem. Stąd też dwie wersje pliku, osobny dla k700 i osobny dla Nokii, w rzeczywistości różnią się tylko w miejscu:

Kod: Zaznacz cały

OK              'AT+CGDCONT=1,"IP","www.idea.pl"'
OK              ATD*99***1#

K700 nie rozumie polcenia AT+...., stąd APN dla tego telefonu podawany jest w ciągu ATD.

W przypadku zmiany telefonu, wystarczy zczytać jego adres (pkt 5) i dokonać zmian w pliku /etc/bluetooth/rfcomm.conf wg pkt 8.

No i jakby tu powiedzieć na koniec:

SOA#1 (U mnie działa).

Kod: Zaznacz cały

killall -9 pppd
nieelegancko, ale skutecznie rozłącza neta.

W załączniku pliki z powyższej solucji.
Załączniki
pliki_515.zip
(6.22 KiB) Pobrany 838 razy
Awatar użytkownika
kwalo
Przyjaciel
Przyjaciel
Posty: 75
Rejestracja: 15 lis 2005, 23:20
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME

Post autor: kwalo » 05 wrz 2007, 18:46

Poniższy wpis jest komentarzem użytkownika bebe do tego HOWTO. Jemu należą się podziękowania.

Mam konfigurację 7.04 + K700i + PlusGSM. Działało wszystko do momentu pobierania adresu IP. Wyglądało to tak:
Kod:
...

Kod: Zaznacz cały

Remote message: Congratulations!
PAP authentication succeeded
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
rcvd [LCP ProtRej id=0x1 80 fd 01 01 00 0c 1a 04 78 00 18 04 78 00]
Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
sent [LCP EchoReq id=0x1 magic=0x34840f7d]
rcvd [LCP EchoRep id=0x1 magic=0x777f995a]
IPCP: timeout sending Config-Requests
sent [LCP TermReq id=0x2 "No network protocols running"]
rcvd [LCP TermAck id=0x2]
Connection terminated.
(U mnie dodatkowo wpisałem sobie na stałe adresy DNS, bo tak życzy sobie PlusGSM. W pliku /etc/ppp/options:

Kod: Zaznacz cały

ms-dns 212.2.96.51
ms-dns 212.2.96.52
)
Łączenie zadziałało, kiedy w pliku /etc/ppp/peers/gprs dodałem dyrektywę ipcp-restart:
Kod:

Kod: Zaznacz cały

ipcp-restart 10
Domyślnie ustawiona jest na 3, i najwyraźniej w tak "krótkim" czasie PlusGSM się nie wyrabia. :)
ODPOWIEDZ

Wróć do „Hardware-Sieć”