使用 Scapy(在 Python3.6 中)和 Docker 比较 IP 地址的最简单方法是什么?我有一段代码使用 Scapy sniff() 嗅探我的 Docker 网桥网络。我想查看每个数据包的源 IP 地址,如果它与名为“plc1”的容器的 IP 地址匹配,请执行其他步骤。如果它们不匹配,我只返回一个空列表并继续。
但是我无法弄清楚如何将数据包的源 IP 地址与容器名称进行比较。它确实需要是容器的名称而不是 ID,因为我正在并行运行大量容器并且查找 ID 以插入我的 Python3.6 脚本是乏味的。有什么想法吗?我试过使用 Docker SDK,但它需要容器 ID,这是我试图避免的...
示例 Python3.6 代码,它不起作用,包含在下面:
#!/usr/bin/env python3
from scapy.all import *
def find_ports(pkt):
# if src IPaddr matches IP addr of container plc1...
if pkt[IP].src == 'plc1': # THIS DOES NOT WORK
# if there is a match, get some additional packet info
if TCP in pkt:
tcp_dport = pkt[TCP].dport
ip_total_len = pkt.getlayer(IP).len
ip_header_len = pkt.getlayer(IP).ihl * 32 / 8
tcp_header_len = pkt.getlayer(TCP).dataofs * 32 / 8
tcp_seg_len = ip_total_len - ip_header_len - tcp_header_len
sequence_num = pkt[1].ack
return [tcp_dport, tcp_seg_len, sequence_num]
# else if NO MATCHING ip addr's, return blank list...
else:
return []
tempList = sniff(filter="ip", prn=find_ports, iface="br-19f0ba1cf88f")
# if templist not empty...
if tempList:
# send a TCP RST packet...
ip = IP(src="plc1", dst="hmi_pass_thru")
tcp = TCP(sport=502, dport=tempList[0], flags="R", seq=int(tempList[1]), ack=int(tempList[2]) + 1)
pkt = ip / tcp
ls(pkt)
send(pkt, verbose=0)