python - 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 之间有什么区别。
为什么我的代码不起作用?
解决方案
推荐阅读
- callback - 如何在回调请求中动态发送json正文
- extjs3 - 编辑 Extjs 3.4 时无法检查 xchekbox modx
- python - 如何嵌入响应?不和谐机器人 Python
- python - Spring_layout 不适用于权重
- javascript - 如何将翻译添加到我的 matrix3d 旋转 3D CSS 立方体
- apache-kafka - 在spring app prometheus中启用kafka客户端指标
- image-processing - 初学者如何分析粒子?
- python - Python修复了字典中的未来时间戳
- python - Python中出生日期的格式检查
- javascript - 在 React JS 和 iOS 中,底部标签被底部标签导航器截断