调试uip网络协议栈之-tun虚拟设备模拟IP数据包
来源:互联网 发布:hostease端口 编辑:程序博客网 时间:2024/05/16 08:20
背景:
开发0ip tcp/ip网络协议栈
开发过程中需要测试每个协议层的正确性,我先写了最简单的传输层协议UDP。手上没有方便使用的以太网设备做数据包收发,而TAP/TUN分别是可以模拟以太网数据(ETH层),网络层数据(IP层),一般用于类Unix系统中。正好虚拟机中装有Debian Linux系统,内核也有 /dev/net/tun 虚拟设备驱动。如果你的系统没有,那就得将TUN/TAP内核模块选上,重新编译内核。或者应该有什么办法直接 insmod 进去(没有实际操作过)。
正文:
参考 uip 协议栈,在网络协议栈对应的 ip 层,写一个 tun 应用,即虚拟一个 ip 层。然后用测试工具,ping 对应的 ip ,让 uip 协议栈去处理这个 ip 包,并再通过 tun 应用传到 ping 这段。由此完成一轮 app->ip->app层的测试。
uip是原作者亚当在十年前开发的,他使用的bsd系统,到linux系统上需要一些变动。我将此项目fork到自己的帐号上,方便学习之用。也好让大家参考参考。
编译后, sudo ./uip 启动 uip 协议栈。大家可以通过 ifconfig 命令查看虚拟出的网络接口 tun0 。
$ sudo ifconfig
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.0.1 P-t-P:192.168.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:4088 (3.9 KiB)
$ ping 192.168.0.2
— tun_dev: tundev_read: read 88 bytes
0 0 8 0 45 0 0 54 86 cf 40 0 40 1 32 86 c0 a8 0 1
— tun_dev: tundev_read: read 88 bytes
0 0 8 0 45 0 0 54 87 9b 40 0 40 1 31 ba c0 a8 0 1
原本是用 putty登录到虚拟机,发现启动 uip 后整个 puty 就接近崩溃了。关掉 putty 后,却再也登录不进去。直接操作虚拟机,启动不了 uip ,提示 bad file descriptor。可能是这个文件描述被占用。具体原因还不清楚。
1, Linux TUN/TAP
2, Tesing tun/tap interfaces
- 调试uip网络协议栈之-tun虚拟设备模拟IP数据包
- 网络协议栈(7)tun/tap设备
- uIP TCP/IP协议栈
- Linux虚拟网络之tun(四)虚拟VPN
- uIP嵌入式TCP/IP协议栈
- Contiki网络协议栈uIP和rime
- linux TUN 虚拟网卡设备
- linux TUN 虚拟网卡设备
- Linux虚拟网络之tun(一)基本使用
- Linux虚拟网络之tun(二)Raw包转发
- BSD TCP/IP协议栈 uC/IP LwIP uIP TinyTcp
- BSD TCP/IP协议栈 uC/IP LwIP uIP TinyTcp
- 一个简易的基于tun/tap设备的协议栈
- uIP + mcu51-63K仿真器实现TCP/IP协议栈
- 开源项目: uIP嵌入式TCP/IP协议栈
- TCP/IP协议栈uIP在S3C44B0上的移植
- 在RTOS上移植uIP TCP/IP协议栈
- Windows下uIP协议栈调试详解(使用winpcap)
- Volley的更多使用方法详解,imageloader的使用和NetWorkImageView的使用,进阶Volley
- 常用类之Math类DateSimpleDateFormat
- Toolbar与Actionbar
- 欧拉函数&最大公约数
- shell--关联数组
- 调试uip网络协议栈之-tun虚拟设备模拟IP数据包
- mybatis的sqlMapConfig的settings设置
- Web渗透笔记--01--SQL Injection
- Spring方法拦截器MethodInterceptor
- 网页清除隐藏文字.去除网页文字干扰码的两种方法
- Xavier初始化方法
- Spring 事务笔记
- poj 2442 Sequence
- Leetcode | Count Complete Tree Nodes