【问题标题】:Check network connection from an IP address with Python使用 Python 检查来自 IP 地址的网络连接
【发布时间】:2013-05-24 09:48:05
【问题描述】:

如何使用 python 检查是否仍有来自特定 IP 地址的连接。

【问题讨论】:

  • 我相信你的意思是到一个特定的IP地址。也就是ping?
  • 是的,Elazar,到一个特定的地址,是的,它是一个 ping。如果我ping这个IP地址并且如果有连接,它将返回true,如果没有,它将返回false。
  • 然后看我评论里的链接。答案就在那里。
  • 非常感谢 Elazar。

标签: python network-programming ip-address python-sockets


【解决方案1】:

ping ip地址

import os
#192.168.1.10 is the ip address
ret = os.system("ping -o -c 3 -W 3000 192.168.1.10")
if ret != 0:
    print "pc still alive"

在任何情况下,您确实想检查您尝试连接的 PC 上传入连接的可用性,您需要创建一个程序来接收已经不可能的连接。

【讨论】:

  • 根据目前的问题,我相信 OP 希望检查传入连接的状态,而不是 IP 是否可访问。
  • 我试过了,但即使没有连接,它也会显示“电脑仍然活着”。
  • 使用ping -n 3 -w 3000 192.168.1.10
  • pc还活着的时候不应该是ret == 0吗?
  • ret 在 Windows 中将始终为 1。它仅适用于 Linux。
【解决方案2】:

据我了解,OP 正在寻找活动连接 FROM 某个 ip,这意味着他想在本地检查是否存在活动连接。对我来说,它看起来像 netstat 的东西。有几种选择:

  1. 您可以使用psutils,如this 帖子中所示。您将需要循环活动进程并查询活动连接。

  2. 您可以使用 netstat.py——Jay Loden、Giampaolo Rodola 的 netstat 克隆来为您完成这项工作。

已添加:

你可以这样做:

import psutil

def remote_ips():
    '''
    Returns the list of IPs for current active connections

    '''

    remote_ips = []

    for process in psutil.process_iter():
        try:
            connections = process.get_connections(kind='inet')
        except psutil.AccessDenied or psutil.NoSuchProcess:
            pass
        else:
            for connection in connections:
                if connection.remote_address and connection.remote_address[0] not in remote_ips:
                    remote_ips.append(connection.remote_address[0])

    return remote_ips

def remote_ip_present(ip):
    return ip in remote_ips()

这就是它的工作原理:

>>>remote_ips()
['192.168.1.50', '192.168.1.15', '192.168.1.52', '198.252.206.16', '198.252.206.17'] 
>>>remote_ip_present('192.168.1.52')
True
>>>remote_ip_present('10.1.1.1')
False

【讨论】:

    【解决方案3】:

    你可以使用socket library:

    import socket
    
    try:
        socket.gethostbyaddr(your_ip_adrress)
    except socket.herror:
        print u"Unknown host"
    

    【讨论】:

    • 嗨,kadi,我试过了,但是说 Unknown Host None 甚至认为有连接。
    • 嗨,Nethan,如果无法访问主机,则表示该地址上没有打开连接。
    • @kadi gethostbyaddr 没有说任何关于连接性的事情(在任何意义上)。它仅返回与 IP 地址关联的名称。为当前未启动的主机返回名称是完全有效的。或者对于已启动的主机不返回任何名称。
    【解决方案4】:
    import os
    address = "my_ip_address"
    os.system('ping ' + address)
    

    【讨论】:

    • 好的,你发送了一个 ping,然后呢?
    • 据我了解,问题不是关于通过网络的物理连接,而是关于建立的 tcp/udp 连接
    • @Elazar 乒乓球! :D
    猜你喜欢
    • 2014-08-21
    • 2010-10-09
    • 2020-01-14
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多