Nmap IP分片发送学习

本文深入探讨了Nmap中IP分片的原理和实现,包括MTU的理解、分片过程的细节以及如何填充IP包头中的关键字段。通过实例解析了如何将IP数据包划分为多个片段,并详细阐述了发送函数的工作方式。
摘要由CSDN通过智能技术生成

Netutil.cc

IP分片并发送函数解析

1、mtu是通信协议某一层上面所能通过的最大数据大小

2、分片过程:

将IP数据部分划分为fragment片,每片大小mtu,最后一片大小datalen % mtu(因为可能不足mtu)

划分好的每片长度fdatalen

 for (fragment = 1; fragment * mtu < datalen + mtu; fragment++) {
    fdatalen = (fragment * mtu <= datalen ? mtu : datalen % mtu);  

3、ip包头中需要填充的字节:

需要填充的ip_off是相对数据部分的偏移,因此偏移字节为fragment - 1) * mtu ,又由于ip_off是以8字节为单位

  ip->ip_off = htons((fragment - 1) * mtu / 8);



/* Create and send all fragments of a pre-built IPv4 packet
 * Minimal MTU for IPv4 is 68 and maximal IPv4 header size is 60
 * which gives us a right to cut TCP header after 8th byte
 * (shouldn't we inflate the header to 60 bytes too?) */
int send_frag_ip_packet(int sd, const struct eth_nfo *eth,
  const struct sockaddr_in *dst,
  const u8 *packet, un
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值