是python的新手并且陷入了困境。我想创建端口扫描程序只使用python 3内置库(意味着避免scapy等)我有以下代码:
import socket
for i in range(1,26):
s = socket.socket()
s.settimeout(0.5)
ip = "74.207.244.221" #scanme.nmap.org
response = s.connect_ex((ip, i))
if response:
print ("%d\tclose" %i)
else:
print ("%d\topen" %i)
s.close()
现在我想为此添加2个功能:即
答案 0 :(得分:1)
区分关闭和过滤的端口。在这两种情况下我 收到相同的errno作为回报,我该如何检查我是否收到了 支持第一个数据包或什么都没有
您可能只检查过发送RST的服务器。这是我试过的:
第一种情况,正常配置:
>>> os.strerror(s.connect_ex((ip, 81)))
'Connection refused'
其次,使用手动iptables:
iptables -A OUTPUT -p tcp --dport 81 -j DROP
>>> os.strerror(s.connect_ex((ip, 81)))
'Resource temporarily unavailable'
我想控制尝试次数(尝试次数),即我要发送 只有一个或两个syn包。
我认为没有公开setsockopt
TCP选项,但在linux上有:
net.ipv4.tcp_syn_retries
但是,由于您限制了套接字的超时,因此所有未在0.5秒内完成的操作都将超时。因此,可能只有1或2个SYN将离开电台。
答案 1 :(得分:0)
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socekt.SOCK_STREAM)
host = 74.207.244.221
def portscan(port):
try:
s.connect((host,port))
return True
else:
return False
for x in range(1,255):
if portscan(x):
print('Port',x,'Is Open')