本附件程序在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

LDD3中snull网络驱动程序的使用相关推荐

  1. linux驱动设备信息失败怎么办,Linux设备驱动程序(LDD)中snull的编译问题 《转》

    对LDD中snull程序,编译的时候会有许多问题,鉴于网上还没有合适的解决办法,做此总结,整理知识.本文在debian6.0上运行通过,内核版本为2.6.32. 学习LDD中网络驱动程序部分,理解sn ...

  2. Windows内核原理与实现之 NDIS(网络驱动程序接口规范)

    文章摘录自<Windows内核原理与实现>一书. 在Windows的网络栈中,网络协议与网络适配器是分离的,协议驱动程序并不针对特定的网络适配器而设计,然而,当协议驱动程序正真运行时,它必 ...

  3. NDIS网络驱动程序-----

    from:http://blog.sina.com.cn/s/blog_61d65e360100waop.html NDIS网络驱动程序-----学习(一) (2011-08-15 21:48:14) ...

  4. Linux操作系统网络驱动程序编写

    2019独角兽企业重金招聘Python工程师标准>>> Linux操作系统网络驱动程序编写 一.Linux系统设备驱动程序概述     1.1 Linux设备驱动程序分类     1 ...

  5. Docker中的网络详解

    本节主要是介绍Docker默认的网络行为,包含创建的默认网络类型以及如何创建用户自定义网络,也会介绍如何在单一主机或者跨主机集群上创建网络的资源需求. 1.默认网络 当你安装了docker,她自动创建 ...

  6. linux usbnet网络驱动,[技术资料]基于usb设备的linux网络驱动程序开发

    1 引言 做为开放源代码 (open source) 运动重要组成部分,linux操作系统吸引了数以万计的程序员共同开发.由于linux比较完整的继承了各种unix版本的稳定和高效,并且克服和改进了传 ...

  7. Java中的网络和TCP/IP协议

    网络和TCP/IP协议 一.网络通信协议 1.1 协议和七层模型 1.2 TCP/IP协议 二.网络通信的实现 2.1 TCP协议通信 2.2 UDP协议通信 前言: 有时候我们会不理解,我们在QQ上 ...

  8. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

  9. linux中的网络配置

    Linux中的网络配置 1 什么是IP ADDRESS 2 子网掩码 3 ip通信判定 4 网络设定工具 4.1 设置双网卡 4.2 ping命令 4.3 ifconfig命令 4.4 ip addr ...

最新文章

  1. DataGrid和GridView单击背景变色双击颜色还原
  2. ActiveMQ持久化消息的三种方式
  3. R语言可视化绘图基础知识详解
  4. 算法----有效的括号
  5. Windows Mobile 6.5.3 Developer Tool Kit
  6. BroadcastReceive之ip拨号
  7. TCP的拥塞控制机制
  8. CISCO PVST+配置和结果验证 per vlan spanning tree(51cto 实验10)
  9. c# 日期函数[string.Format----GetDateTimeFormats] --转载
  10. git pull git add git commit git branch git更新代码git提交git分支管理
  11. 高效管理http连接
  12. 那些年,我们一起学过的汇编----之子程序设计
  13. [机器学习入门] 经典台大李宏毅机器学习课程从这里开始
  14. 关于IE上embed自动播放
  15. 【Java异常】Variable used in lambda expression should be final or effectively final
  16. php黑名单绕过,文件上传漏洞之黑名单检测绕过
  17. arg是什么函数_JavaScript 函数式编程 - 基本范式简介
  18. ANSYS中vonnbsp;misesnbsp;stres…
  19. 【BYM】Android 实现相机快门动画
  20. 华东师大计算机软件6,华东师大计算机应用于技术题库 .doc

热门文章

  1. 信息安全已成社会普遍焦虑 给个人信息加上防护锁
  2. 博鳌直击 | 大数据开发的最大障碍是什么?
  3. nginx下面server配置
  4. Maven + Eclipse + Tomcat - 开启项目调试之旅(转载)
  5. Lotus 下部门间用户的移动操作
  6. MS UC 2013-0-虚拟机-标准化-部署-1-虚拟化-部署
  7. WebSen!NT的行业分类说明
  8. 2007年10月小记
  9. Vue.js响应式原理
  10. python3 xml 对象转字符串_Python3 基本数据类型详解