在Python套接字中接收自定义Scapy数据包

时间:2015-11-11 10:10:38

标签: python linux sockets scapy

我正在尝试使用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'

如何接收数据包并对其进行解码以读取其自定义图层?

1 个答案:

答案 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')