• 大小: 0M
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: Python
  • 标签: 其他  

资源简介

sniffer_get_body.py

资源截图

代码片段和文件信息

import struct
import socket


ip_header_fmt = ‘!BBHHHBBH4s4s‘
tcp_header_fmt = ‘!HHLLBBHHH‘
udp_header_fmt = ‘!HHHH‘
IP_HEAD_LEN = struct.calcsize(ip_header_fmt)  # 20字节
TCP_HEADER_LEN = struct.calcsize(tcp_header_fmt)  # 20字节
UDP_HEAD_LEN = struct.calcsize(udp_header_fmt)  # 8字节
IP_MAX_LEN = 65535


def unpack_ip_header(buf):
    if len(buf) < IP_HEAD_LEN:
        return
    try:
        iph = struct.unpack(ip_header_fmt buf[:IP_HEAD_LEN])
        protocol_map = {1: ‘ICMP‘ 6: ‘TCP‘ 17: ‘UDP‘}
        return {
            ‘version‘: iph[0] >> 4  # 高4位
            ‘ihl‘: (iph[0] & 0xF) * 4  # 低4位,每个长度单位表示4字节,最大为60字节
            ‘tos‘: iph[1]  # 8位
            ‘len‘: iph[2]  # 16位
            ‘id‘: iph[3]  # 16位
            ‘offset‘: iph[4]  # 16位
            ‘ttl‘: iph[5]  # 8位
            ‘protocol‘: protocol_map.get(iph[6] str(iph[6]))  # 8位
            ‘cks‘: iph[7]  # 16位
            ‘src‘: iph[8]  # 32位
            ‘dst‘: iph[9]  # 32位
        }
    except Exception as e:
        raise e


def unpack_tcp_header(buf):
    if len(buf) < TCP_HEADER_LEN:
        return
    try:
        tcph = struct.unpack(tcp_header_fmt buf[:TCP_HEADER_LEN])
        return {
            ‘src‘: tcph[0]  # 16位
            ‘dst‘: tcph[1]  # 16位
            ‘seq‘: tcph[2]  # 32位
            ‘ack‘: tcph[3]  # 32位
            ‘thl‘: (tcph[4] >> 4) * 4  # 高4位
            ‘wlen‘: tcph[6]  # 16位
        }
    except Exception as e:
        raise e


def unpack_udp_header(buf):
    if len(buf) < UDP_HEAD_LEN:
        return
    try:
        udph = struct.unpack(udp_header_fmt buf[:UDP_HEAD_LEN])
        return {
            ‘src‘: udph[0]  # 16位
            ‘dst‘: udph[1]  # 16位
            ‘dlen‘: udph[2]  # 16位
            

评论

共有 条评论