Scapy,发送、接收与响应
我现在在做一个项目,需要向特定的网络设备发送数据包,接收它们的回复,并根据这些回复实时生成新的数据包。
我发现了Scapy,听说它可以做到前两步:发送和接收数据包。请问通过Python能否提取回复中的必要信息,并进行回应呢?
谢谢!
1 个回答
4
如果我理解你的意思,你在使用Scapy时至少有两个选择:
第一个是比较干净的做法,就是创建一个AnsweringMachine
,根据你的需求来定制(在Scapy的代码中有很多示例可以参考)。
第二个做法虽然有点“脏”,但如果你需要快速解决问题,这可能更合适。你可以把一个函数作为prn
参数传给sniff()
,这个函数会接收数据包,然后制作一个回应(或者你想做的任何事情),最后通过send()
把它发送到网络上。
举个例子,下面的代码会对任何带有SYN标志的TCP数据包发送RST-ACK数据包:
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)