精心制作的数据包重新封装

问题描述

我有一个应该用来制作数据包并发送的代码,但是当我发送数据包时它会重新封装,这在处理数据包或我发送数据包的方式上有问题 该文件称为PCAS

import struct
import get_mac_a
from getmac import get_mac_address as gma

def ITB(ip):
    hex_list = ip.split('.')
    aabgsa = bytes(0)
    for x in hex_list:
        aabgsa += bytes([int(x)])
    return aabgsa
def UDP_IPv4(SRC_ip,Des_ip,SRC_port,Des_port,data):
    if type(data) == bytes:
        try:
            
            eth_packet = get_mac_a.obtain_mac_addr('192.168.1.1')
        except:
            eth_packet = get_mac_a.obtain_mac_addr('10.0.0.1')
        aas = gma().split(':')
        bssasd = b''
        for i in aas:
            bssasd += struct.pack('B',int(i,16))
        eth_packet += bssasd
        eth_packet += b'\x08\x00'

        
        ip_packet = b'\x45'
        ip_packet += b'\x00'
        ip_packet += struct.pack('H',32*5+len(data))
        ip_packet += b'\x00\x00'
        ip_packet += b'\x00\x00'
        ip_packet += b'\x40'
        ip_packet += b'\x11'
        ip_packet += b'\x00\x00'
        ip_packet += ITB(SRC_ip)
        ip_packet += ITB(Des_ip)

        
        udp_packet = struct.pack('H',SRC_port)
        udp_packet += struct.pack('H',Des_port)
        udp_packet += struct.pack('H',64+len(data))
        udp_packet += b'\x00\x00'
        udp_packet += data
        ip_packet += struct.pack('H',64+len(data))
        udp_IPv4_packet = eth_packet + ip_packet + udp_packet
        return udp_IPv4_packet
        
    else:
        exit('enter a binary value for data')

文件get_mac_a是这个

import subprocess
def obtain_mac_addr(ip):
    try:
        ip_table = subprocess.check_output(['arp','-a',ip])
        router_ip = 'Tipo\r\n  '
        router_ip += ip
        router_ip += '           '
        res = ip_table.split(bytes(router_ip,'utf-8'))[1].split(bytes("     dinamico  \r\n",'utf-8'))[0].split(bytes('-','utf-8'))
        es = b''
        for i in res:
            es += bytes([int(i,16)])
        return es
    except:
        exit('check your internet connection')

发送数据包的代码是这个

import socket
import threading 
import PCAS
from time import sleep


raw_sock = socket.socket(socket.AF_INET,socket.soCK_RAW,socket.IPPROTO_RAW)


while True:
    sleep(1)
    raw_sock.sendto(PCAS.UDP_IPv4('192.168.1.84','192.168.1.11',5543,6666,b'\x03'),('192.168.1.11',6666))

和接收它的代码

import socket
import struct
port = 6666
s = socket.socket(socket.AF_INET,socket.IPPROTO_RAW)
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
s.bind(('192.168.1.11',6666))
print ("waiting on port:",port)
while 1:
          data,addr= s.recvfrom(65553)
          print (data )
          print ('\n')

但是它发送了这个

E\x00\x00Am0\x00\x00\x80\xff\x00\x00\xc0\xa8\x01\x0b\xc0\xa8\x01\x0b \xb0\x01\xbfmx<\x95\t\x13d\x8d\x08\x00E\x00\xa1\x00\x00\x00\x00\x00@\x11\x00\x00\xc0\xa8\x01T\xc0\xa8\x01\x0bA\x00\xa7\x15\n\x1aA\x00\x00\x00\x03

我的函数返回的数据包是

 \xb0\x01\xbfmx<\x95\t\x13d\x8d\x08\x00E\x00\xa1\x00\x00\x00\x00\x00@\x11\x00\x00\xc0\xa8\x01T\xc0\xa8\x01\x0bA\x00\xa7\x15\n\x1aA\x00\x00\x00\x03

我不想使用Scapy

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)