我正在尝试在python套接字中使用Scapy发送自定义数据包(带有自定义层)。
这是客户端的代码
#!/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'
如何接收数据包并对其进行解码以读取其自定义层?
数据在这一行变成一个字符串:
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-将sock.recv转换为字符串
stringdata = data.decode('utf-8')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句