首页 > 解决方案 > Python 2D 字典

问题描述

https://github.com/ewmiller/syn-detector/blob/master/detector.py

我正在制作一个同步数据包检测器,我一直在尝试使用 2D 字典添加 who_got_scanned() 函数。

我想要这样的输出,但不知何故它不起作用。

[+] Found : 128.3.23.5                                                                                               
[+] count (SYN) : 34                                      
[+] count (SYN_ACK) : 1                                   
    [+] Scanned IP address : 196.119.124.204              
    [+] Scanned IP address : 196.119.124.132              
    [+] Scanned IP address : 196.119.124.231

我是 python 新手,所以我做了一个简单的程序来展示我的理解。

test.py

x = {
        '1.1.1.1' : {
            '1.1.1.1' : 1,
            '2.2.2.2' : 2,
            '3.3.3.3' : 3,
            '4.4.4.4' : 4
            }
        }

for k in x.keys() :
    if k == '1.1.1.1' :
        for k2 in x[k].keys() :
            print(str(k2))

The result

1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4

第一个“1.1.1.1”IP 地址是源 IP 地址。而内联的键和值分别是它们收到的目的IP地址和SYN包。

所以我打算只打印关键值,即目标 IP 地址,并且效果很好。

所以我将它用于我的 SYN 扫描仪代码。但它不断发生错误,我不知道出了什么问题。

def who_got_scanned(src_addr, dst_addr) :
    if src_addr in scanned_addr :
        if dst_addr in scanned_addr[src_addr] :
            scanned_addr[src_addr][dst_addr] = scanned_addr[src_addr][dst_addr] + 1
        else :
            scanned_addr[src_addr][dst_addr] = 1

    else :
        scanned_addr[src_addr] = dst_addr

这是 who_got_scanned() 函数。

这是我打印出扫描的 IP 地址的代码。

for k1, v1 in addresses.items() : 
    if v1[0] >= v1[1] * 3 : 
        print("[+] Found : " + k1) 
        print("[+] count (SYN) : " + str(v1[0])) 
        print("[+] count (SYN_ACK) : " + str(v1[1])) 
        for k2 in scanned_addr.keys() : 
            if k1 == k2 : 
                for k3 in scanned_addr[k2].keys() : 
                    print("\t[+] Scanned IP address : " + str(k3)) 
        print("==============================================")

我看不出我的扫描仪和 test.py 之间有什么区别。

为什么我的代码不起作用?

标签: python

解决方案


推荐阅读