hello world

          隨筆 - 2, 文章 - 63, 評論 - 0, 引用 - 0
          數據加載中……

          Android實現pppoe撥號上網(二)具體步驟

          實驗環境搭建,滿足pppoe鏈接的基礎服務,就是保證ppp協議能夠封裝在以太網框架中的一種網絡隧道協議,因為集成了ppp協議,所以實現了創痛以太網不能提供身份驗證,加密和壓縮的功能。本質上,它是一個允許在以太網廣播域中的兩個以太網接口間創建ppp協議隧道。它使用傳統的基于PPP的軟件來管理一個不是使用串行線路而是使用類似于以太網的有向分組網絡的連接。這種有登陸和口令的標準連接,方便了接入供應商的記費。并且,連接的另一端僅當PPPoE連接接通時才分配IP地址,所以允許IP地址的動態復用。

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

          (PPPoE及TCP/IP協議棧) 

          (一)pppoe-server  

          也就是PC機器,我這邊只說linux系統下面的情況,我的是Ubuntu系統,下載rp-pppoe:  http://www.roaringpenguin.com/products/pppoe

          按照里面的README來要求來安裝rp-pppoe。最簡單的就是default直接運行go腳本。然后PC機器就可以運行pppoe-server命令了。不要急,還要對server進行配置,配置文件在/etc/pppoe-server-options,打開進行改寫。我的配置如下:

          						# PPP options for the PPPoE server
          						# LIC: GPL
          auth                   #鏈接時候驗證require-chap           #CHAP認證# login                #鏈接后驗證
          lcp-echo-interval 10#每10秒發送心跳信令request
          lcp-echo-failure 2#連續兩條心跳信令reply沒有回復斷開鏈接

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

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

          最后在PC端啟動pppoe-server,輸入命令:

          sudo pppoe-server -I eth0

          (二)pppoe-client  

          在android上面移植pppoe模塊,同樣使用rp-pppoe,我們可以build成模塊移植到android終端上面,需要自己寫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出來pppoe可執行模塊,push到/system/bin下面,當然可以直接改寫rp-pppoe的makefile。于是在終端就可以發起pppoe鏈接請求了。  

          (三)運行測試

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

          (2)adb進入設備終端后,輸入

          						/system/bin/pppoe -d
          就會發起Discorvery,在廣播域內廣播PADI報文,成功的話會返回發現的pppoe-server的MAC地址,并且在PC端抓包eth0的話,使用ppp||pppoed進行過濾,能夠收到終端的廣播報文。這樣就能說明已經實現pppoe通路。接著:

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

          這樣就會發起pppoe鏈接,經過Discovery,認證,LCP,最終建立其ppp鏈接。在PC端會看到新建立起來的ppp0,Client端也會看到。

          (四)后續配置

          (1)PC端配置iptable使終端的數據包能夠請求訪問internets

          echo 1 > /proc/sys/net/ipv4/ip_forward   //打開iptable,該命令切換到root運行
          iptables  -t nat -F            //清空表項
          iptables  -t nat -L            //現實表項
          iptables  -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to 192.168.163.254
          //-s 為終端獲得的ip,--to 為ethx 的ip

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

          ip -d route                     //查看路由表項
          ip route del default//刪除掉全部default,需要操作多遍   
          ip route adddefault dev ppp0   //將默認路由設為ppp0
          ip -d route                     //再次查看

          (3)配置dns

          這樣操作的話是不需要設置dns的,因為鏈接wlan的時候,使用的dns-server與現在的是完全一樣的,如果經過上述操作,能夠ping通internet但是不能夠正常上網的話,一定就是dns的問題了。

          						getprop
          						net
          						.dns1
          						//查看默認路由1
          						getprop
          						net
          						.dns2
          						//查看默認路由2
          						setprop
          						net
          						.dns1
          						110
          						.112
          						.120
          						.115
          						//設置默認路由1 
          						setprop
          						net
          						.dns2
          						110
          						.112
          						.120
          						.114
          						//設置默認路由2
          				

          posted on 2017-06-02 15:30 聽風 閱讀(853) 評論(0)  編輯  收藏 所屬分類: 嵌入式

          主站蜘蛛池模板: 武强县| 潼南县| 获嘉县| 陇西县| 姚安县| 台南县| 米脂县| 额济纳旗| 武平县| 北海市| 黔东| 福鼎市| 绿春县| 大化| 盘锦市| 渭源县| 正宁县| 满城县| 平湖市| 乌兰浩特市| 鄂尔多斯市| 阳西县| 台中县| 台南县| 花莲市| 巴南区| 南澳县| 永修县| 刚察县| 长寿区| 桐乡市| 高雄市| 马山县| 镇江市| 布尔津县| 马关县| 巴林右旗| 呼图壁县| 全椒县| 阳东县| 堆龙德庆县|