我有一个客户发送了一个包,其中有一个用Scapy创建的自定义层“Reservation”
客户端.py
#!/usr/bin/env python
import socket
from scapy.all import *
class Reservation(Packet):
name = "ReservationPacket"
fields_desc=[ ShortField("id", 0),
BitField("type",None, 0),
X3BytesField("update", 0),
ByteField("rssiap", 0)]
pkt = IP(len=16384, src='192.168.240.5', dst='192.168.240.198',
id=RandShort(), ttl=2)/TCP(sport=5005,
dport=5005, flags="S", window=200,
options=[('MSS', 1460), ('WScale', 2)])/Reservation(id=11)/"HELLO"
spkt = bytes(pkt)
spkt += '\x00'*20
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
s.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)
s.sendto(spkt, ('192.168.240.198', 5005))
s.close()
数据包已正确发送。在
如何访问数据包的特定字段?如何解释接收到的数据?我想用类似于卫星识别号以检索该字段的值。有可能吗?在
编辑 我已经到了这个地步: 我正在通过tcp套接字发送pcaket。其结构如下:
^{pr2}$其中ReservationPacket是自定义层。 数据包被接收,并且
data = conn.recv(BUFFER_SIZE)
if not data: break
print "received data:", data
by = str.encode(data)
pkt_hex = by.encode('hex')
hexdump(by)
container = IP(data)
container.show()
我填充集装箱包装,其定义为
container = IP()/TCP()/Reservation()
的输出
container.show()
是
###[ IP ]###
version = 4L
ihl = 5L
tos = 0x0
len = 16384
id = 56856
flags =
frag = 0L
ttl = 2
proto = tcp
chksum = 0x3987
src = 192.168.240.5
dst = 192.168.240.1
\options \
###[ TCP ]###
sport = 5005
dport = 5005
seq = 0
ack = 0
dataofs = 7L
reserved = 0L
flags = S
window = 200
chksum = 0xd962
urgptr = 0
options = [('MSS', 1460), ('WScale', 2), ('EOL', None)]
###[ Raw ]###
load = '\x00\t\x00\x00\x00\x00PROVA'
显然保留层没有被识别和解释为原始的。我怎样才能建立与传输的相同的数据包?在
您可以使用
s=str(packet)
来序列化scapy 2中的数据包,并使用packet=Layer(s)
强制将bytestream反序列化为Layer
。在在您的情况下:
请注意,您还可以使用
^{pr2}$bind_layers()
绑定scapys autodissect/payload猜测层,使其与sniff()
或tcp/Reservation bytestreams(具有保留有效负载的tcp包)分离。以下行绑定TCP.dport=5005去预定。在更新:具体回答您的问题。在
您不必关心IP/TCP层,因为这一切都是在套接字中处理的。}反序列化为
socket.recv
接收到的数据是TCP
的有效负载,因此您所要做的就是强制scapy将接收到的{Reservation
。在TCP套接字:
此外,您可以指示scapy尝试根据一个简单的规则自动剖析您的层,例如
TCP.dport==5005
,并调用bind_layers()
。这样,它也可以与sniff
一起工作,或者在您收到完整的IP/TCP/Reservation/Raw
字节流时使用。在原始套接字:
相关问题 更多 >
编程相关推荐