我目前正在开发一个项目,我需要将数据包发送到特定的网络硬件,接收响应,并根据响应实时生成数据包。
我遇到了Scapy,根据我的理解,它能够完成前两个部分:发送和接收。是否可以通过Python在响应中检索必要的字段并回复?
谢谢!
答案 0 :(得分:2)
如果我理解你的意思,你有(至少)Scapy的两个选择:
干净的是创建一个符合您需求的AnsweringMachine
(您在Scapy的代码中有几个例子)。
脏(但可能更快,如果这是你需要的),一个是将prn
参数提供给sniff()
一个函数,它将接收数据包,制作答案(或任何你喜欢的)和send()
它在网络上。
例如,此代码将RST-ACK数据包发送到使用SYN标志的任何TCP数据包:
def rst(p):
ans = IP(src=p[IP].dst, dst=p[IP].src)/TCP(
flags='RA',
sport=p[TCP].dport,
dport=p[TCP].sport,
seq = 0,
ack = p[TCP].seq + 1,
)
send(ans, verbose=False)
return "%s\n => %s" % (p[IP].summary(), ans.summary())
sniff(iface="eth0", filter="tcp and tcp[tcpflags] & tcp-syn == tcp-syn",
prn=rst)