Scapy & Docker:不使用容器 ID 获取容器的 IP 地址?

时间:2021-04-12 03:11:12

标签: python-3.x docker tcp scapy docker-networking

使用 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)

0 个答案:

没有答案
相关问题