hello world

          隨筆 - 2, 文章 - 63, 評(píng)論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          Android實(shí)現(xiàn)pppoe撥號(hào)上網(wǎng)(二)具體步驟

          實(shí)驗(yàn)環(huán)境搭建,滿足pppoe鏈接的基礎(chǔ)服務(wù),就是保證ppp協(xié)議能夠封裝在以太網(wǎng)框架中的一種網(wǎng)絡(luò)隧道協(xié)議,因?yàn)榧闪藀pp協(xié)議,所以實(shí)現(xiàn)了創(chuàng)痛以太網(wǎng)不能提供身份驗(yàn)證,加密和壓縮的功能。本質(zhì)上,它是一個(gè)允許在以太網(wǎng)廣播域中的兩個(gè)以太網(wǎng)接口間創(chuàng)建ppp協(xié)議隧道。它使用傳統(tǒng)的基于PPP的軟件來(lái)管理一個(gè)不是使用串行線路而是使用類(lèi)似于以太網(wǎng)的有向分組網(wǎng)絡(luò)的連接。這種有登陸和口令的標(biāo)準(zhǔn)連接,方便了接入供應(yīng)商的記費(fèi)。并且,連接的另一端僅當(dāng)PPPoE連接接通時(shí)才分配IP地址,所以允許IP地址的動(dòng)態(tài)復(fù)用。

          ---wiki : http://zh.wikipedia.org/zh-cn/PPPoE

          (PPPoE及TCP/IP協(xié)議棧) 

          (一)pppoe-server  

          也就是PC機(jī)器,我這邊只說(shuō)linux系統(tǒng)下面的情況,我的是Ubuntu系統(tǒng),下載rp-pppoe:  http://www.roaringpenguin.com/products/pppoe

          按照里面的README來(lái)要求來(lái)安裝rp-pppoe。最簡(jiǎn)單的就是default直接運(yùn)行g(shù)o腳本。然后PC機(jī)器就可以運(yùn)行pppoe-server命令了。不要急,還要對(duì)server進(jìn)行配置,配置文件在/etc/pppoe-server-options,打開(kāi)進(jìn)行改寫(xiě)。我的配置如下:

          						# PPP options for the PPPoE server
          						# LIC: GPL
          auth                   #鏈接時(shí)候驗(yàn)證require-chap           #CHAP認(rèn)證# login                #鏈接后驗(yàn)證
          lcp-echo-interval 10#每10秒發(fā)送心跳信令request
          lcp-echo-failure 2#連續(xù)兩條心跳信令reply沒(méi)有回復(fù)斷開(kāi)鏈接

          保存退出,這樣配置完成,這樣在建立ppp鏈接的Discovery階段就會(huì)進(jìn)行驗(yàn)證,server保存的驗(yàn)證用戶名,密碼就在/etc/ppp/chap-secrets里面:

          # Secrets for authentication using CHAP
          # client               server      secret             IP addresses"user_xiaokeweng"    *           "my_password"      *
          其中各個(gè)字段的含義,顧名思義,*指代all。

          最后在PC端啟動(dòng)pppoe-server,輸入命令:

          sudo pppoe-server -I eth0

          (二)pppoe-client  

          在android上面移植pppoe模塊,同樣使用rp-pppoe,我們可以build成模塊移植到android終端上面,需要自己寫(xiě)make file,我這邊是用Android.mk:

          LOCAL_PATH:= $(call my-dir)
          include $(CLEAR_VARS)
          
          LOCAL_SRC_FILES:=\
              src/pppoe.c \
              src/if.c \
              src/debug.c \
              src/common.c \
              src/ppp.c \
              src/discovery.c
          
          LOCAL_MODULE_PATH := $(LOCAL_PATH)
          LOCAL_MODULE_TAGS := optional
          LOCAL_MODULE := pppoe
          LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
          
          include $(BUILD_EXECUTABLE)

          于是build出來(lái)pppoe可執(zhí)行模塊,push到/system/bin下面,當(dāng)然可以直接改寫(xiě)rp-pppoe的makefile。于是在終端就可以發(fā)起pppoe鏈接請(qǐng)求了。  

          (三)運(yùn)行測(cè)試

          (1)首先要保證Client,Server都在一個(gè)廣播域中,按照前文中的思路,手持終端是通過(guò)wifi,鏈接到接入LAN中的無(wú)線路由器中,而PC是直接接入到LAN中的。 

          (2)adb進(jìn)入設(shè)備終端后,輸入

          						/system/bin/pppoe -d
          就會(huì)發(fā)起Discorvery,在廣播域內(nèi)廣播PADI報(bào)文,成功的話會(huì)返回發(fā)現(xiàn)的pppoe-server的MAC地址,并且在PC端抓包eth0的話,使用ppp||pppoed進(jìn)行過(guò)濾,能夠收到終端的廣播報(bào)文。這樣就能說(shuō)明已經(jīng)實(shí)現(xiàn)pppoe通路。接著:

          /system/bin/pppd pty "/system/bin/pppoe -I wlan0" user user_xiaokeweng password my_password

          這樣就會(huì)發(fā)起pppoe鏈接,經(jīng)過(guò)Discovery,認(rèn)證,LCP,最終建立其ppp鏈接。在PC端會(huì)看到新建立起來(lái)的ppp0,Client端也會(huì)看到。

          (四)后續(xù)配置

          (1)PC端配置iptable使終端的數(shù)據(jù)包能夠請(qǐng)求訪問(wèn)internets

          echo 1 > /proc/sys/net/ipv4/ip_forward   //打開(kāi)iptable,該命令切換到root運(yùn)行
          iptables  -t nat -F            //清空表項(xiàng)
          iptables  -t nat -L            //現(xiàn)實(shí)表項(xiàng)
          iptables  -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to 192.168.163.254
          //-s 為終端獲得的ip,--to 為ethx 的ip

          (2)在終端增加路由表項(xiàng)目

          ip -d route                     //查看路由表項(xiàng)
          ip route del default//刪除掉全部default,需要操作多遍   
          ip route adddefault dev ppp0   //將默認(rèn)路由設(shè)為ppp0
          ip -d route                     //再次查看

          (3)配置dns

          這樣操作的話是不需要設(shè)置dns的,因?yàn)殒溄觲lan的時(shí)候,使用的dns-server與現(xiàn)在的是完全一樣的,如果經(jīng)過(guò)上述操作,能夠ping通internet但是不能夠正常上網(wǎng)的話,一定就是dns的問(wèn)題了。

          						getprop
          						net
          						.dns1
          						//查看默認(rèn)路由1
          						getprop
          						net
          						.dns2
          						//查看默認(rèn)路由2
          						setprop
          						net
          						.dns1
          						110
          						.112
          						.120
          						.115
          						//設(shè)置默認(rèn)路由1 
          						setprop
          						net
          						.dns2
          						110
          						.112
          						.120
          						.114
          						//設(shè)置默認(rèn)路由2
          				

          posted on 2017-06-02 15:30 聽(tīng)風(fēng) 閱讀(853) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 嵌入式

          主站蜘蛛池模板: 新疆| 大名县| 获嘉县| 都匀市| 青岛市| 海门市| 五常市| 昭平县| 中方县| 叙永县| 锦屏县| 雷波县| 马龙县| 高雄市| 台东市| 梅河口市| 磐石市| 武邑县| 剑阁县| 日照市| 阜宁县| 阿坝县| 呼玛县| 庄浪县| 九江县| 海原县| 乐昌市| 翼城县| 惠东县| 安多县| 依兰县| 诏安县| 炎陵县| 巧家县| 区。| 维西| 海门市| 卢龙县| 江山市| 大洼县| 教育|