我有一个端口扫描器脚本,它可以扫描端口并告诉您它们是打开的还是关闭的。有没有一种方法可以让我看到端口与之通信的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正在通过脚本运行后找到的端口与主机通信。
发布于 2017-10-03 08:47:45
>>> s.getpeername()
('207.38.86.25', 80)对于其他想要获取网站ip地址而不想先创建socket对象的人,您也可以像这样使用socket.gethostbyname(hostname):
def get_ip_address(host):
try:
return socket.gethostbyname(host)
except:
return Nonehttps://stackoverflow.com/questions/46535602
复制相似问题