andorid pppoe拨号上网

简单介绍一下PPPOE拨号

首先,我们通过介质(网线)连接到ISP的主机,这时候我们的机器只能和ISP通讯,除此之外就不能干其他的事情了。

然后我们需要和ISP协商我想访问外网输入用户名密码,通过他的验证后,他就会分配一个IP地址,让你访问外网了。

从中我们可以看出,如果我们想进行PPPOE拨号的开发验证,如果我们使用家里用的网线拨号会将是一个非常痛苦的情况,

我很难经行调试跟踪。 所以,我们需要搭建一个pppoe服务器,然后用我们pppoe客户端验证。


清单:1、linux主机一台(虚拟机的情况测试失败){这里还可以用RASPPPOE_099.ZIP window server的程序,在win7无法安装,之后没有尝试}

    2.  rp-pppoe-3.8.tar.gz 

    3. wireshrk 软件


首先,我们先解决重点的问题 android的pppoe移植,pppd程序安卓已经帮我们搞定了,我们就不折腾了。

【andorid源码环境】没有话我也不知道怎么往下说了。


然后我们开始

#在andorid目录下我们建立一个文件夹放pppoe的程序,我们可以看到pppd这个程序也在android/external/ppp下,我们照葫芦画瓢先建立一个文件夹叫pppoe

mkdir xxxxxx/android/external/pppoe/

#然后把rp-pppoe-3.8.tar.gz  里面的src目录扔到pppoe目录里,然后新建一个Android.mk

最后的效果pppoe目录下:   Android.mk  src


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
LOCAL_CFLAGS += '-DVERSION="3.10"' \
       '-DPPPD_PATH="/system/bin/pppd"'

include $(BUILD_EXECUTABLE)

#开始编译了,先到andorid源码的根目录

. build/envsetup.sh

lunch 

#这里选择一个产品,

cd   external/pppoe

mm

#发现编译出错的那个文件,给编译错误的文件加上一些代码


/* Structure used to connect() the socket to a particular tunnel UDP 
 *  * socket over IPv6. 
 *   
 */ 
struct pppol2tpin6_addr { 
       __kernel_pid_t  pid;            /* pid that owns the fd. 
                                        * 0 => current */ 
       int     fd;                     /* FD of UDP socket to use */ 
 
       __u16 s_tunnel, s_session;      /* For matching incoming packets */ 
       __u16 d_tunnel, d_session;      /* For sending outgoing packets */ 
 
       struct sockaddr_in6 addr;       /* IP address and port to send to */ 
}; 
 

/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32 
 * bits. So we need a different sockaddr structure. 
 */ 
struct pppol2tpv3_addr { 
       pid_t   pid;                    /* pid that owns the fd. 
                                        * 0 => current */ 
       int     fd;                     /* FD of UDP or IP socket to use */ 
 
       struct sockaddr_in addr;        /* IP address and port to send to */ 
 
       __u32 s_tunnel, s_session;      /* For matching incoming packets */ 
       __u32 d_tunnel, d_session;      /* For sending outgoing packets */ 
}; 
 

struct pppol2tpv3in6_addr { 
       __kernel_pid_t  pid;            /* pid that owns the fd. 
                                        * 0 => current */ 
       int     fd;                     /* FD of UDP or IP socket to use */ 
 
       __u32 s_tunnel, s_session;      /* For matching incoming packets */ 
       __u32 d_tunnel, d_session;      /* For sending outgoing packets */ 
 
       struct sockaddr_in6 addr;       /* IP address and port to send to */ 
}; 

#重新编译

pppoe程序就OK了,然后放到andrid   system/bin 目录下


#安卓pppoe服务端

#解压

#./go

#安装完毕


配置服务器

1.vim /etc/ppp/pppoe-server-options
对server进行配置
# PPP options for the PPPoE server  
# LIC: GPL  
auth                   #链接时候验证  
require-chap           #CHAP认证  
# login                #链接后验证  
lcp-echo-interval 10   #每10秒发送心跳信令request  
lcp-echo-failure 2     #连续两条心跳信令reply没有回复断开链接  


2、这样在建立ppp链接的Discovery阶段就会进行验证,server保存的验证用户名,密码就在/etc/ppp/chap-secrets里面:

vim  /etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
usr     *       123                             *


3.start server
pppoe-server -I wlan0 -L 192.168.5.1 -R 192.168.5.5 -N 10   #启动服务 

# -I wlan0  因为我是用wifi上网这里的节点号是wlan0,   -L  主机地址这个是虚拟的随便取即可,-R 是分配的起始IP地址 -N 一共可以分配的IP地址数量


 iptables -t nat -A POSTROUTING -s 192.168.5.0/24  -j SNAT --to-source 192.168.0.141  

#这里--to-source 192.168.0.141 这个地址是实际的服务器的物理网卡ip地址


echo "1">/proc/sys/net/ipv4/ip_forward   //开启ipv4的转发功能 ,不设置这步导致客户端无法上网


#这样服务器就已经完成了,忘记了干一件事情我们把调试的工具安装好


sudo apt-get install wrieshark

#打开这个程序遇到了一些状况


出现原因:权限不够,所以不能够读取网卡

我们需要  setuid

root@u-VirtualBox:/home/u/a20/android# whereis dumpcap

dumpcap: /usr/bin/dumpcap /usr/bin/X11/dumpcap /usr/share/man/man1/dumpcap.1.gz

chmod 4755 /usr/bin/dumpcap


我们监控一下wlan0 ,过滤条件是ppp||pppoed




下面我们来看客户端的情况

pppd pty ‘/system/bin/pppoe -I wlan0 ′ user usr password 123

忘记了必须让服务器端和客户端处在同一个网段下。

我们观察获取一下pppoed链接的包是否有,如果有恭喜环境神马的都对了,如果没有先用windows pppoe 拨号尝试一下是否收到包

如果不能的话,检查是否在同一个局域网,然后看服务是否起来,另外虚拟的情况的桥接可以跟宿主机通讯 NAT和桥接和其他机器测试都发现不可以


如果正常的话:我们可以观察到建立链路和协商的包

1.广播 ff:ff:ff:ff:ff:ff  code 0x09(active discovery initiation PADI)   session_id 0x0000   想介入集线器提出要求提供服务
2.集线器收到PADI 发送PPPoe有效发现提供 PADO包相应请求 code 0x07(active discovery offer PADO) session_id 0x0000 
3.主机可能收到多个PADO包 选择一个合适的,然后想锁选择的介入集线器发送PPPOE有效发现请求PADR 0x19  session_id 0x0000 
4.接入集线器收到ADDR 后准备PPP 会话   发送一个PPPoe有效发现会话确认 PADS   0X65  SESSION_ID为介入集线器产生的唯一PPPoe会话标志号码
PADT 指示PPP会话终止, code 0xa7, 终止会话的session_id


第四步有两种奇怪,如果密码错误或者服务器端配置书写错误都会直接断开连接发送PADT命令



链路建立成功。我们在andorid可以看到分配出192.168.5.x的一个ip地址,(我们测试的话本来局域网就能上网有些不太方便)


现在路由表还是有问题的上网决定是用的wlan0或者eth0上网,还需要配置一下路由表和dns

busybox route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0
busybox route add  default gw 192.168.5.1 dev ppp0 

#这里两条都可以,实际用isp的情况未测试。
setprop net.dns1 114.114.114.114 #这里不明白dns能否直接获取到,设置成114发现可用




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值