win10 python 捕获并解析本机网卡IP数据包

原理就是调用socket模块里提供的各种API捕获数据包,然后根据RFC791协议对捕获的数据包按格式进行解析,把数据分类然后存储在一个字典里。

捕获部分代码:

def catchIPData():
    # 获取本机IP作为公共网络接口
    HOST = socket.gethostbyname(socket.gethostname())
    # 创建一个原始套接字
    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
    # 将该套接字与公共网络接口绑定
    s.bind((HOST, 0))
    # 设定该套接字包含IP数据报首部
    s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    # 设定该套接字接收所有数据包
    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    # 接收一个数据包并返回
    packet = s.recvfrom(4096)
    return packet

解析部分代码:

def decodeIpHeader(packet):
    # 创建一个空字典
    IPDatagram = {}
    # 根据RFC791协议对数据包进行解析
    IPDatagram['version'] = packet[0] >> 4
    IPDatagram['headLength'] = packet[0] & 0x0f
    IPDatagram['serviceType'] = packet[1]
    IPDatagram['totalLength'] = (packet[2] << 8) + packet[3]
    IPDatagram['identification'] = (packet[4] << 8) + packet[5]
    IPDatagram['flag'] = packet[6] >> 5
    IPDatagram['moreFragment'] = IPDatagram['flag'] & 1
    IPDatagram['dontFragment'] = (IPDatagram['flag'] >> 1) & 1
    IPDatagram['fragmentOffset'] = ((packet[6] & 0x1f) << 8) + packet[7]
    IPDatagram['TTL'] = packet[8]
    IPDatagram['protocol'] = packet[9]
    IPDatagram['headerCheckSum'] = (packet[10] << 8) + packet[11]
    # 源IP地址和目的IP地址都按照IP地址的格式用字符串存储
    IPDatagram['sourceAddress'] = "%d.%d.%d.%d" % (packet[12], packet[13], packet[14], packet[15])
    IPDatagram['destinationAddress'] = "%d.%d.%d.%d" % (packet[16], packet[17], packet[18], packet[19])
    # 根据数据包中头部长度确定是否有选项,如果有则添加至option列表中
    IPDatagram['options'] = []
    if IPDatagram['headLength'] > 5:
        step = 5
        while step < IPDatagram['headLength']:
            IPDatagram['options'].append(packet[step * 4])
            IPDatagram['options'].append(packet[step * 4 + 1])
            IPDatagram['options'].append(packet[step * 4 + 2])
            IPDatagram['options'].append(packet[step * 4 + 3])
            step += 1
    # 根据数据包中的总长度将数据部分添加至data列表中
    IPDatagram['data'] = []
    step = IPDatagram['headLength'] * 4
    while step < IPDatagram['totalLength']:
        IPDatagram['data'].append(packet[step])
        step += 1
    # 返回储存有数据包数据的字典
    return IPDatagram

 

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要捕获本机网卡IP并对其进行解析,需要使用网络协议分析工具。其中,常见的工具括Wireshark、tcpdump等。这些工具都可以在本机安装,并通过设置参数或指定网卡捕获所需的IP。 一旦成功捕获IP解析它们的方式可能会因的类型而异。例如,对于TCP,我们需要查看头中的各个字段,如源端口、目的端口、ACK号等,以及数据负载的内容。而对于UDP,我们只需要查看头中的源端口、目的端口和数据负载即可。 此外,IP解析还可能涉及各种协议栈,如TCP/IP、UDP/IP等。因此,在对IP进行分析和解读时,我们需要了解各个协议的工作原理,以便更好地理解IP的内容和作用。 综上所述,捕获本机网卡IP并对其解析是一项相对复杂的任务,需要掌握相关的工具和技术知识才能完成。只有深入了解协议栈和相关协议的工作原理,才能对IP进行有效的解析和分析。 ### 回答2: 捕获本机网卡IP并对其解析可以通过使用网络协议分析工具来实现。常见的工具有Wireshark、tcpdump等。这些工具可以监听网络接口收到的数据包,并对其进行解析。 首先,我们需要打开分析工具,并选择要监听的网络接口。通常,我们会选择本机所连接的网络接口,如以太网卡、Wi-Fi网卡等。然后,我们可以设置过滤器来筛选我们所关心的数据包。例如,我们可以设置过滤器来只看HTTP协议相关的,或者只看源IP地址为某个特定地址的等等。 接下来,我们可以通过分析工具提供的解析功能来解析数据包的内容。数据包含了许多信息,如源IP地址、目标IP地址、协议类型、数据长度等等。我们可以根据需要选择需要解析的信息,其中最常用的是源IP地址和目标IP地址。通过观察源IP地址和目标IP地址,我们可以了解到数据包的通信双方,从而更好地分析网络通信的行为。 总的来说,捕获本机网卡IP并对其解析是一项非常重要的网络分析工作。它可以帮助我们更好地理解网络通信的行为,发现网络问题,并进行故障排除。 ### 回答3: 为了实现捕获本机网卡IP并对其解析,我们可以使用网络套接字编程和数据包解析库。具体步骤如下: 1. 创建一个原始套接字,用于发现和接收网络数据包,可以使用Python中的socket库实现。 2. 设置套接字选项,以便在接收网络数据包IP数据包头部。 3. 开始监听网络数据包,等待接收数据包。 4. 一旦收到数据包,我们需要对其进行解析,以便提取出有用的信息,例如源IP地址、目标IP地址、协议类型等。 5. 使用数据包解析库,例如dpkt来对提取出来的IP数据包头进行解析。 6. 最后,我们可以输出解析后的结果到控制台或者保存到文件中进行后续分析。 通过以上步骤,我们就可以实现捕获本机网卡IP并对其解析的功能。这种技术可以用于网络安全领域,在网络通信过程中进行数据监控和嗅探,以便及时发现和解决安全问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值