索愛在K550以後的主流手機和M608/W958後的智能手機都支持利用藍牙局域網技術PAN通過藍牙連接到電腦,通過電腦的網絡上互聯網,從而享受到了手機免費玩互聯網的樂趣,比如PlayNow,可以隨便和快速地試聽歌曲而不用花費用(僅限試聽),或從mp3百度下載mp3,或收取blog在手機查看。速度比gprs/edge快上幾十倍(如果是藍牙2.0,速度只受你的ADSL和手機處理器限制),而又沒什麼什麼包月500元封頂這樣的費用。PlayNow會給你輕松的感受,程序員的你可以想象出建立一個手機上的P2P音樂網絡。
PAN在windows下配置很容易,要靠安裝藍牙軟件和點鼠標,但出了問題就無法查找,難解決。在ubuntu下掌握了工作原理後就很容易了,配置好後,就非常透明和自動了,手機在每次想開始使用時可以隨時連接網絡,而不用點任何鼠標開任何軟件,是一個free的世界,在windows下則要忍受蹩腳的藍牙軟件,如果你是程序員,甚至感覺到藍牙軟件搞亂了你的系統。
我嘗試配置了一天下午,搞通了這個,就很暢快了。給我指引和啟示主要是如下兩篇網上文章,A篇給了一個配置的整體結構,B篇避免了前篇的缺點和復雜,要結合兩篇配置的優點才做到一個更好的配置:
同時,按A篇的說明,配置時和試驗單個部分時經常查看 tail -n 100 /var/log/messages 會對Troubleshooting和了解原理非常有好處。
有一個比較重要的原理是: 藍牙網絡連接bnep0,只有手機連接上來時,才會生效/可見,手機斷開時,bnep0就會消失,這和有線eth0或wifi是不同的。
(1)前提准備:首先將你的手機和ubuntu配置起來支持基本的藍牙連接,即是能搜索到,能輸入匹配密碼,如果已經能互傳文件就是更好了。
(2)桌面電腦需要的額外軟件: 先按A篇,安裝好dhcp3-server:
install apt-get install dhcp3-server
(3)按A篇在/etc/dhcp3/dhcpd.conf配置好,讓手機自動獲取ip地址:
option domain-name "example.org";(這個無所謂)
option domain-name-servers 202.96.128.166, 202.96.134.133;(這個為你的dns server ip)
subnet 10.0.254.0 netmask 255.255.255.0 {
authoritative; (這個是A篇的設置沒提示的,但手機能連上來,並發出dhcp包後,dhcp server的/var/log/message會提示)
range 10.0.254.1 10.0.254.10;
option domain-name-servers 202.96.128.166;
option domain-name "cache-b.guangzhou.gd.cn";
option routers 10.0.254.1;
option broadcast-address 10.0.254.255;
default-lease-time 600;
max-lease-time 7200;
}
此時手機沒連接上來,沒配置好藍牙網絡連接bnep0 ip為10.0.254.1,/etc/init.d/dhcp3-server restart是fail的,因為根本還沒這個10.0.254.1這個ip和subnet 10.0.254.0
(4)按A篇在/etc/bluetooth/hcid.conf設置: lm accept, master;
(5)按A篇在/etc/default/bluetooth設置:
PAND_ENABLED=1
PAND_OPTIONS="——listen ——role=NAP ——devup /etc/bluetooth/pan/dev-up" (手機藍牙pan連接上來時bnep0就會生效,並會自動啟動dev-up執行)
配置好後,記得:
/etc/init.d/bluetooth restart
(6)不按A篇在/etc/network/interfaces作任何配置,由B篇的啟示,直接在/etc/bluetooth/pan/dev-up設置bnep0的ip地址和nat路由:
mkdir /etc/bluetooth/pan
vi /etc/bluetooth/pan/dev-up
chmod +x /etc/bluetooth/pan/dev-up
dev-up內容:
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig {GetProperty(Content)} 10.0.254.1 netmask 255.255.255.240 mtu 900
ifconfig {GetProperty(Content)} up
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.0.254.0/24 -j MASQUERADE
iptables -A FORWARD -i bnep0 -o eth0 -j ACCEPT
iptables -A FORWARD -o bnep0 -i eth0 -j ACCEPT
sleep 2
/etc/init.d/dhcp3-server restart
(7)此時就可以按網上其它文章在手機上建立藍牙PAN連接上來就可以了就算配置結束和成功了,手機tcp/ip/dns都用默認的自動配置。
可以通過tail -n 100 /var/log/messages看到dhcp分配給手機的IP地址,並能ping得通。
手機有了IP地址並能以TCP/IP網絡的方式運行,會給做軟件的你很多想象,你能以你熟悉的socket編程方式開發你的手機應用程序了