问题描述
我有一个应该用来制作数据包并发送的代码,但是当我发送数据包时它会重新封装,这在处理数据包或我发送数据包的方式上有问题 该文件称为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 (将#修改为@)