【网络实验】非法(不按RFC标准)修改skb数据包遇到的现象
2017-07-10 22:15
399 查看
为论文做Linux内核编程实验总能遇到一些神奇的现象,现记录如下。
一、修改IP Fragment Offset(失败)
根据导师的需求,我在Netfilter Local Out钩子函数中把13bit fragment offset填为自定义的数据,同时保证flag DF位=1,即“不能分片”(Don‘t Fragment),希望各种网络软硬件设施能允许我发送这样的包。
我装载内核模块后,试图访问Linux文档的网站,结果如下图。
结果上看,wireshark已经识别了我的设置,虽然Flags确实是“不能分片”,但是offset不为0的话还是被软件认为是“Fragmented IP protocol”。14号报文是对9号报文的应答,它是深红色的,因为RST=1,说明网站服务器拒绝和我方建立TCP连接。
二、修改TCP 4个保留bit(失败)
TCP头部“数据偏移”字段(也就是TCP首部长度字段)后面原本有6个保留比特,ECN被设计出来后,有2个bit供其使用(RFC文档)。导师希望把剩余的4个bit用起来。我发现struct tcphdr可以直接访问这个bitfield,于是修改之。
我装载内核模块后,试图访问Linux文档的网站,结果如下图。
wireshark发现我修改了reserved bit,同时我自行计算的TCP首部checksum也是对的。但是,从9号报文开始大规模重传(约100ms超时),且我方从未收到任何应答报文,说明我方发送的包被某些软硬件设备丢弃。
一、修改IP Fragment Offset(失败)
根据导师的需求,我在Netfilter Local Out钩子函数中把13bit fragment offset填为自定义的数据,同时保证flag DF位=1,即“不能分片”(Don‘t Fragment),希望各种网络软硬件设施能允许我发送这样的包。
我装载内核模块后,试图访问Linux文档的网站,结果如下图。
结果上看,wireshark已经识别了我的设置,虽然Flags确实是“不能分片”,但是offset不为0的话还是被软件认为是“Fragmented IP protocol”。14号报文是对9号报文的应答,它是深红色的,因为RST=1,说明网站服务器拒绝和我方建立TCP连接。
二、修改TCP 4个保留bit(失败)
TCP头部“数据偏移”字段(也就是TCP首部长度字段)后面原本有6个保留比特,ECN被设计出来后,有2个bit供其使用(RFC文档)。导师希望把剩余的4个bit用起来。我发现struct tcphdr可以直接访问这个bitfield,于是修改之。
我装载内核模块后,试图访问Linux文档的网站,结果如下图。
wireshark发现我修改了reserved bit,同时我自行计算的TCP首部checksum也是对的。但是,从9号报文开始大规模重传(约100ms超时),且我方从未收到任何应答报文,说明我方发送的包被某些软硬件设备丢弃。
相关文章推荐
- 避免网络IP地址被非法修改
- 妙招避免网络IP地址被非法修改
- Linux 内核网络协议栈 ------ tcp重传数据包 tcp_xmit_retransmit_skb
- 用netfilter_queue 在用户态修改网络数据包的例子程序
- 新手看招:避免网络 IP 地址被非法修改
- 用netfilter_queue 在用户态修改网络数据包的例子程序
- 网络实验遇到的问题(4)
- 妙招避免网络IP地址被非法修改
- 避免网络IP地址被非法修改--禁止修改IP
- 避免非法修改 屏蔽网络设置参数小技巧
- Linux 内核网络协议栈 ------ tcp重传数据包 tcp_retransmit_skb 函数
- linux下c语言网络实验遇到的问题(1)
- 妙招避免网络IP地址被非法修改
- 避免网络IP地址被非法修改
- linux 3.18内核使用device tree方式修改网络驱动遇到的问题
- 计算机网络实验,JAVA实现一个简单GBN协议,模拟引入数据包的丢失,验证协议的有效性
- linux c 网络实验遇到的问题(2)
- 避免网络IP地址被非法修改
- 妙招避免网络IP地址被非法修改
- 网络管理经验谈:避免网络IP地址被非法修改