LDD3中snull网络驱动程序的使用


本附件程序在Ubuntu 14.04、内核版本3.13下测试通过。

1、测试步骤
1) 在/etc/networks文件中添加如下网段IP:
snullnet0 192.168.0.0
snullnet1 192.168.1.0
2)在/etc/hosts文件中添加如下IP地址:
192.168.0.1 local0
192.168.0.2 remote0
192.168.1.2 local1
192.168.1.1 remote1
3)编译成KO文件后使用insmod安装模块,并设置网络接口:
insmod ./snull.ko
ifconfig sn0 local0
ifconfig sn1 local1
4)ping测试
ping -c 1 remote1

当ping -c 1 remote1 时用dmesg查看内核日志,可看到:
[15303.586006] snull: c0a80001:30223 <-- c0a80002:02048
[15303.586061] snull: c0a80101:00000 --> c0a80102:32271

2、结果分析:
在snull_hw_tx()函数中,做了三个调换以实现欺骗:
来源地址第三octet 0<->1
目的地址第三octet 0<->1
设备snX编辑0<->1

这样做的理由是:
sn0(发):192.168.0.1 --> 192.168.0.2
做了调换后,就变成:
sn1(收):192.168.1.1 --> 192.168.1.2 
因为sn1的地址就是192.168.1.2,所以,它收到这个包后,会回应: 
         sn1(发):192.168.1.2 --> 192.168.1.1,
同样地,做了这样的调换后,就变成: 
         sn0(收):192.168.0.2 --> 192.168.0.1
这样,sn0就会收到这个包,实现了ping的请求与应答。


注:
如果要调试timeout
insmod snull.ko lockup=3


猜你喜欢

转载自blog.csdn.net/u012247418/article/details/80170874