我正在尝试使用Scapy在python套接字中发送自定义数据包(带有自定义图层)。
这是客户端的代码
#!/usr/bin/env python
import socket
from scapy.all import *
TCP_PORT = 5000
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.240.1', TCP_PORT))
class Reservation(Packet):
name = "ReservationPacket"
fields_desc=[ ByteField("id", 0),
BitField("type",None, 0),
X3BytesField("update", 0),
ByteField("rssiap", 0)]
k = IP(dst="192.168.240.1")/Reservation()
k.show()
send(k)
print "Reservation Message Sent"
s.close()
并且数据包k似乎已成功创建并发送。
这是负责接收数据包的服务器:
#!/usr/bin/python
import socket
from scapy.all import *
class Reservation(Packet):
name = "ReservationPacket"
fields_desc=[ ByteField("id", 0),
BitField("type",None, 0),
X3BytesField("update", 0),
ByteField("rssiap", 0)]
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('192.168.240.1', 5000))
s.listen(1)
while True :
conn, addr = s.accept()
print 'Connection address:', addr
print ''
data = conn.recv(1024)
data.show()
conn.close
s.close()
这是我从服务器获得的输出:
Connection address: ('192.168.240.5', 58454)
Traceback (most recent call last):
File "server.py", line 36, in <module>
data.show()
AttributeError: 'str' object has no attribute 'show'
如何接收数据包并对其进行解码以读取其自定义图层?
答案 0 :(得分:0)
数据成为这一行的一个字符串:
data = conn.recv(1024)
检查文档https://docs.python.org/2/library/socket.html
socket.recv(bufsize [,flags])从套接字接收数据。该 返回值是表示接收数据的字符串。最大值 一次接收的数据量由bufsize指定。见 Unix手册页recv(2)表示可选参数的含义 标志;它默认为零。
你想用data.show()做什么,你可以打印数据:
print data
也可以按照此链接解码字符串: Python - converting sock.recv to string
stringdata = data.decode('utf-8')