实验环境搭建,满足pppoe链接的基础服务,就是保证ppp协议能够封装在以太网框架中的一种网络隧道协议,因为集成了ppp协议,所以实现了创痛以太网不能提供身份验证,加密和压缩的功能。本质上,它是一个允许在以太网广播域中的两个以太网接口间创建ppp协议隧道。它使用传统的基于PPP的软件来管理一个不是使用串行线路而是使用类似于以太网的有向分组网络的连接。这种有登陆和口令的标准连接,方便了接入供应商的记费。并且,连接的另一端仅当PPPoE连接接通时才分配IP地址,所以允许IP地址的动态复用。

(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 -tnat -F //清空表项iptables -tnat -L //现实表项iptables -tnat -APOSTROUTING -s 192.168.1.1 -jSNAT --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

java拨号上网,Android实现pppoe拨号上网(二)具体步骤相关推荐

  1. Android实现pppoe拨号上网(一)概述

    最近在做Android上实现pppoe拨号上网的功能.一般情况下不大可能会用到,但在大陆某些地区,可能会有AP并不支持DHCP功能,或者在某些平台上面装载Android系统的时候,可能会需要移植拓展该 ...

  2. Android 实现PPPoE拨号

    关于Android实现PPPoE拨号上网的问题. 系统必须安装有ppp和rp-pppoe程序.一般ROM自带有ppp程序的.rp-pppoe就未必有了,需要交叉rp-pppoe到目标机.我的开发环境已 ...

  3. 从零开始学飞塔第一篇:飞塔防火墙基本上网配置(PPPoE拨号固定IP上网)FortiGate Broadband internet access

    飞塔防火墙基本上网配置一共分三个部分-----接口-----路由-----策略,且防火墙可代替路由器接入互联网.本文参考Aggy梁工的博客,已征得本人同意.首先我们讲的是PPPoE拨号上网的配置,再讲 ...

  4. java调用bat脚本实现pppoe拨号_pppoe客户端自动拨号原理及实现

    家庭上网大多采用ADSL拨号上网,很多人使用ADSL网络提供商的拨号软件,可这些软件广告太多,并且还公窃取你的上网习惯等信息,所以可以使用XP自带的拨号软件.一般的XP下ADSL拨号操作如下:开始-附 ...

  5. java调用bat脚本实现pppoe拨号_使用 DOS 批处理命令实现宽带 ADSL 开机自动连接

    利用 Windows 的自带命令实现宽带自动连接 笔者使用的是云南文山州网通的全包月宽带,每次开机后第一件事就是连接网络,由于云南文山州网通拨号程序没有提供自动拨号选项,因此必须手工输入用户名和密码, ...

  6. android pppoe 源码,android移植pppoe拨号上网的全过程

    硬件环境:Tiny6410开发板 软件环境:fedora14 + Android 2.3.4 + linux-2.6.36 1.编译内核支持ppp android自带pppd,所以仅仅须要移植pppo ...

  7. Android实现pppoe拨号上网实例

    * 平台:RK3399 * 系统:安卓7.1 >在电脑搭建服务端这里就不赘述了,可看下面的参考文章. 编译生成pppoe可执行文件. 下载rp-pppoe源吗. 在安卓源码下创建external ...

  8. 怎么设置虚拟拨号服务器,如何设置PPPoE上网(ADSL虚拟拨号)

    如果您的上网方式是PPPoE拨号,也就是说您的网络服务商(电信或者网通)给您提供了一组用户名和密码,并且需要使用PPPoE(宽带连接)拨号上网,你该怎么办呢?下面是学习啦小编整理的一些关于如何设置PP ...

  9. 配置PPPOE拨号和固定IP上网-从零开始学RouterOS系列02

    RouterOS 配置PPPOE拨号和固定IP上网 NOTE:PPPOE拨号分两种状况: 第一种就是光猫已经设置成为桥接模式了,我们路由器上面可以直接拨号. 第二种就是光猫代拨号,路由器就可以直接获取 ...

  10. ubuntu16.04 PPPoE拨号上网

    1.打开linux终端,输入命令sudo pppoeconf 2.进入如下界面,选择是. 3.进入如下界面,选择是. 4.进入如下页面,删除原有用户名(重要),重新输入自己账户用户名. 5.进入如下界 ...

最新文章

  1. 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)...
  2. 最全三大框架整合(使用映射)——IDeptDao.java
  3. SQL SERVER最大用户连接数
  4. Win7系统还原声音图标的方法
  5. Photon服务器引擎入门
  6. 基于PCA和贝叶斯决策对CIFAR-10数据图像分类
  7. softmax函数_反向传播之一:softmax函数
  8. vue hot true 不起作用_Vue + Flask 小知识(二)
  9. 财务人员工资那么低,财务工作真的有价值吗?
  10. 毕设题目:Matlab图像加密
  11. SQL alter操作
  12. 3.用Python爬虫,2003-2021的双色球数据
  13. idea+phpstudy完成php对数据库的操作
  14. pytorch的安装--命令
  15. 今年巴菲特的午餐上,躺着流血的地产商
  16. java基于quasar实现协程池【后篇】
  17. BPM软件选型:打通采购主“脉络”,构建阳光高效平台
  18. ros中关于ros::Rate 和ros::spin()等的理解
  19. 计算机信息技术五大变革,信息技术及其影响教学设计
  20. 使用手机控制电脑:百变遥控

热门文章

  1. 点点动画~画出懂你的3D魔方
  2. 2021年安全生产模拟考试(全国特种作业操作证电工作业-防爆电气模拟考试题库二)安考星
  3. 实战开发支付SDK —— 处理微信支付异步回调以及订单状态查询(含源码)
  4. Systick中断延时
  5. 泰然金融牵手快公益 花儿计划国学课入畲乡
  6. 1. C语言的第一个程序
  7. clickhouse - 第三章:内置对象 之 第二节:table表操作 - 创建表与删除表
  8. 调整SumatraPDF暗黑模式
  9. Netflix和它的混世猴子
  10. Acwing-4454. 未初始化警告