如何查看端口与哪个外部 IP 通信 - Python [重复]

Posted

技术标签:

【中文标题】如何查看端口与哪个外部 IP 通信 - Python [重复]【英文标题】:How to see what external IP the port is communication with - Python [duplicate] 【发布时间】:2018-03-14 02:52:58 【问题描述】:

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

【问题讨论】:

编辑:***.com/questions/9481419/… 本帖求本机自己的外网IP。我在询问机器在特定端口上与之通信的外部 IP 地址。 @cᴏʟᴅsᴘᴇᴇᴅ 先获取本地IP,再获取公网IP? 我已经有了本地IP地址,因为它是用户输入的。但是例如,如果我发现在 IP 地址 192.168.1.45 上,端口 1、2 和 3 是开放的,我想知道这些端口正在与什么通信。如果是另一台计算机,可能是那台计算机的公共 IP 地址? 【参考方案1】:

使用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

【讨论】:

谢谢,但我不是这个意思。我想知道使用特定端口正在通信哪些外部 IP 地址。例如,当我运行脚本并输入主机为 192.168.1.22 并扫描端口 1-100 时,可能会说端口 4、12 和 88 已打开。如何检查哪些 IP 外部地址正在使用端口 4、12 和 88 与主机(192.168.1.22)通信? 谢谢你,我先生。这仍然会输出具有开放端口的本地主机。您能否查看我的代码以确保我使用了 s.getpeername() 对吗? 嗯。我不确定如何获取外部 IP 地址。我得四处挖掘一下,看看能不能找到解决办法。 如果你能做到,那就太棒了!我花了一个多小时试图找到解决方案。 如果你只需要获取localhost的ip地址,你可以使用ipapi.co/ip这样的服务来获取你的外部ip地址。你会做类似external_ip = urllib.request.urlopen('http://ident.me').read().decode('utf8')的事情。

以上是关于如何查看端口与哪个外部 IP 通信 - Python [重复]的主要内容,如果未能解决你的问题,请参考以下文章

锐捷交换机如何查看每一个端口的配置状态,如何查看每一个端口?

查看端口是哪个java

Docker ❀ 容器内部/外部通信端口映射网络模式自定义容器网络

如何打开本机端口?

如何检查Windows网络通信端口占用

Java 网络编程