PPPoE 中的包类型

PADI (PPPoE Active Discovery Initiation)
初始化,由客户端广播发送
如果一个用户想要使用DSL拨号连入Internet,那么他的计算机必须首先在其ISP的网络服务提供点(POP)找到DSL访问集中器(DSL-AC)。
在以太网上通讯只能通过MAC地址。由于计算机不知道DSL-AC的MAC地址,于是就在以太网上广播一个PADI报文。这个报文中包含发送者的MAC地址。

PADO (PPPoE Active Discovery Offer) signal is sent by the remote device back to the host.
由远程服务器单播发送到客户端
一旦用户计算机发送了PADI报文,DSL-AC就会使用PADI中提供的MAC地址回复一个PADO报文。PADO报文中包含了DSL-AC的MAC地址、名称以及服务名。
如果多于一个POP的DSL-AC回复了PADO报文,用户计算机就使用提供的名称和服务来从中选择一个。


PADR (PPPoE Active Discovery Request) unicast signal is sent by the host to the remote device.
由客户端单播发送到远程服务器
当用户计算机收到一个来自DSL-AC的可接受的PADO报文后,就会发送一个PADR报文给DSL-AC,用来确认接受发送PADO报文的DSL-AC所提供的PPPoE连接。


PADS (PPPoE Active Discovery Session-Confirmation) is sent by the remote device back to the host.
由远程服务器单播发送到客户端
上面的PADR报文由DSL-AC的PADS报文进行确认,并在其中携带一个会话ID。用户计算机与此DSL-AC的连接现在就完整创建了。


PADT (PPPoE Active Discovery Terminate) signal is sent to terminate a PPPoE session. It is the proper way to terminate a session but is not the actual cause for the termination. The cause may be a simple timeout, a manual request by either end, or an out of spec line condition. 
结束会话,两边都可以发送。
这个报文终结用户计算机与POP的的连接,可由用户计算机或DSL-AC任意一方发送。

 

connect脚本
#!/system/bin/sh

function check_session(){
RESULT=0
if [ $# -eq 1 ] 
then
                RESULT=`busybox egrep -c "^[0-9]*:[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}$" $1`
fi
if [ $RESULT -eq 1 ] 
then
                return 0
else
                return 1
fi
}

PPPOE_SESSION_FILE=/data/ppp/pppoe.session
# Kill the last session first 如果不做会出现断线后再连提示“账号已在线”
if [ -e $PPPOE_SESSION_FILE ] && [ -f $PPPOE_SESSION_FILE ] && check_session $PPPOE_SESSION_FILE
then
        PPPOE_SESSION=`cat $PPPOE_SESSION_FILE`
        echo "The last session is $PPPOE_SESSION, to kill it."
        pppoe -I $IFACE -e $PPPOE_SESSION -k
fi

# get session id
PPPOE_SESSION=`pppoe -p /data/ppp/pppoe.pid -I $IFACE -T 80 -U -m 1412 -d`

echo $PPPOE_SESSION > $PPPOE_SESSION_FILE
if [ $? -eq 0 ] && check_session $PPPOE_SESSION_FILE
then
        awlog "The current session is $PPPOE_SESSION, try to connect."
        setsid pppd pty "pppoe -p /data/ppp/pppoe.pid -I $IFACE -T 80 -U -m 1412 -e $PPPOE_SESSION" \
                noipdefault noauth default-asyncmap defaultroute hide-password nodetach \
                usepeerdns mtu 1492 mru 1492 noaccomp nodeflate nopcomp novj novjccomp \
                user "$USER" password "$PASSWORD" lcp-echo-interval 5 lcp-echo-failure 2 &

#记录Pppd进程PID
        echo "$!" > /data/ppp/pppd.pid
fi

Linux 启动pppoe server:

sudo pppoe-server -I eth0 -L 192.168.1.100 -R 192.168.1.110 -N 10

板端抓包:
tcpdump -n ether proto 0x8863 '||' ether proto 0x8864

 

你可能感兴趣的:(Linux)