我有一个端口扫描程序脚本,可扫描端口并告诉您它们是打开还是关闭。有没有办法可以看到端口正在与之通信的IP地址?脚本:
from threading import Thread
import socket
host = str(input('host > '))
from_port = int(input('start scan from port > '))
to_port = int(input('finish scan to port > '))
counting_open = []
counting_close = []
threads = []
def scan(port):
s = socket.socket()
result = s.connect_ex((str(host),port))
print(('checking ports > '+(str(port))))
if result == 0:
counting_open.append(port)
print((str(port))+' -> is open')
peer = s.getpeername()
print(peer)
s.close()
else:
counting_close.append(port)
#print((str(port))+' -> is closed')
s.close()
for i in range(from_port, to_port+1):
t = Thread(target=scan, args=(i,))
threads.append(t)
t.start()
[x.join() for x in threads]
print(counting_open)
编辑:为了清楚起见,我没有要求用户输入的本地主机的IP。我问是否有办法知道哪些外部公共IP通过脚本运行后发现的端口与主机通信。
答案 0 :(得分:0)
>>> s.getpeername()
('207.38.86.25', 80)
对于想要获取网站IP地址而不首先创建套接字对象的其他人来说,你也可以使用socket.gethostbyname(hostname),如下所示:
def get_ip_address(host):
try:
return socket.gethostbyname(host)
except:
return None