如何查看端口与之通信的外部IP - Python

时间:2017-10-03 00:37:23

标签: python multithreading python-3.x sockets ip

我有一个端口扫描程序脚本,可扫描端口并告诉您它们是打开还是关闭。有没有办法可以看到端口正在与之通信的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通过脚本运行后发现的端口与主机通信。

1 个答案:

答案 0 :(得分:0)

使用getpeername

>>> s.getpeername()
('207.38.86.25', 80)

对于想要获取网站IP地址而不首先创建套接字对象的其他人来说,你也可以使用socket.gethostbyname(hostname),如下所示:

def get_ip_address(host):
    try:
        return socket.gethostbyname(host)
    except:
         return None