我编写了一个端口扫描器来了解有关网络的更多信息
但由于某种原因,它只为扫描的每个端口返回端口 n 已关闭
。
import sys
from scapy.all import *
target = str(sys.argv[1])
beg = int(sys.argv[2])
ran = int(sys.argv[3])
ptable = []
print "beginning port scan on target: " + target
for x in range(beg,ran):
pkt = IP(dst=target)/TCP(dport=x,flags="S")
ans,uans = sr(pkt,timeout=0.5)
if TCP in ans:
if ans[TCP].flags == "SA":
ptable.append(1)
else:
ptable.append(0)
print "======================== port scan summary ==========================="
print " "
for i in range(beg,ran):
if ptable[i-1] == 1:
print "port " + str(i) + " is open"
else:
print "port " + str(i) + " is closed"
最佳答案
这是因为 ans[TCP].flags
返回数值(而不是字符串,而且会产生歧义):
>>> TCP(flags='SA').flags == 'SA'
False
>>> TCP(flags='SA').flags
18
您应该使用 if ans[TCP].flags == 18:
而不是 == "SA"
,或者更好的是,if ans[TCP ].flags & 18 == 18:
.
关于python - python scapy portscanner 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24357217/