andlinux是一种运行在windows之上的ubuntu版本,基础是coLinux,比在虚拟机中运行linux效率更高。该系统默认使用TAP虚拟网卡与宿主和Internet通信,方式不同于bridge,在windows上可以通过SSH 192.168.11.150访问linux shell。
为了使IOL实例间的数据包能被我们捕获,可以使用程序changL2.py和py2net.py两个程序:
changL2.py作用是把标准输入中的pcap文件输出流中的第21-24字节的linktype
改为指定的协议如:ETH、HDLC、PPP、FR、或者你可以手动指定DLT(DataLinkType)类型,随后判断每个包的长度,然后重新输出到标准输出。
这样可以被另一个包捕获程序从标准输入读取,还可以直接使用重定向符写入到文件中。
py2net.py用于将实例通信绑定到指定的网络接口之上:loopback、tap、eth等。
显然最简单的方法就是将实例流量绑定到andlinux中的eth1中,这样,我们在windows中就可以运行wireshark等工作直接抓取。
但是缺点很明显,这种方式只能抓取eth类型封装。
如果实例间运行的是串行协议,这样无法正确抓取。
*注意:转发路由器实例串行接口封装时,重定向符只能为单向( 0 > tap0 ),否则将导致转发环回,出现大量重复的数据包,cpu使用上升。
此时我们可以使用tshark或者tcpdump程序抓取虚拟网卡的流量,然后输出到标准输出,通过管道让changL2.py程序做一个封装格式转化,然后重定向写入到一个文件中。然后我们可以打开该cap文件进行分析。
流程:(以抓取路由器间HDLC串行协议数据为例)
1、使用py2net将IOL路由器实例接口间流量引入tap接口;
2、运行
#tcpdump -i tap0 -w - | ./changL2.py hdlc >test.cap
,执行后,标准的串行pcap封装格式写入到了cap文件。
如果实例间为eth显然没有必要运行changL2。
实验目录如下:
NETMAP文件内容:
1:0/0 2:0/0 1023:0
1:0/1 2:0/1
1:0/2 3:0/2
IFMAP 文件内容:
0>tap0
py2net.py读取NETMAP和IFMAP文件内容,创建socket,发送数据帧。
参考命令如下:
//新建一个虚拟网卡tap0
tunctl -t tap0
//开启并设置tap0为混杂模式,以便于接口不属于本网卡的数据包
ifconfig tap0 promisc up
//开启实验
./start.sh
//开启程序将上述实验中实例接口的流量发送到tap0
./py2net.py
//捕获并写入文件
tcpdump -i tap0 -w - | ./changL2.py hdlc > test.cap
可以通过本地在windows命令行上运行ssh 并将ssh登录由的标准输出通过管道重定向到wireshark程序,这样可以使用wireshark在windows下即可看到动态的路由器实例间的通信过程,参考命令如下:
ssh -l root 192.168.11.150 "cd iou/ospf-traffic-share;tcpdump -i tap0 -w - | ../changeL2.py hdlc" | "D:\Program Files\WiresharkPortable\App\Wireshark\wireshark.exe" -k -i -
以root用户登录andlinux,执行命令切换到实验目录,开始抓包,并重定向到转换程序changeL2使封装格式更改为hdlc,并输出到标准输出中,再次重定向到windows下的wireshark程序,这样即可动态的查看通信过程。
注意:使用了便携版的wireshark(portable)时,重定向应该使用\App\Wireshark目录下的wireshark.exe,不应该使用WiresharkPortable.exe。