2013-05-29 45 views
1

如何使用python检查是否仍然存在来自特定IP地址的连接。使用Python从IP地址检查网络连接

+0

我相信你的意思是*到*一个特定的IP地址。也就是[ping](http://stackoverflow.com/questions/316866/ping-a-site-in-python)? – Elazar

+0

是Elazar,到一个特定的地址,是的,这是一个平。如果我ping这个IP地址,并且如果有连接,它将返回true,否则它将返回false。 – Nethan

+0

然后看看我评论中的链接。答案就在那里。 – Elazar

回答

1

ping IP地址

#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上的传入连接的可用性已经没有问题了。

+0

是不是操作系统依赖? – Elazar

+0

linux和windows我认为有相同的ping命令 –

+0

根据目前的问题,我相信OP希望检查传入连接的状态,而不是IP是否可访问。 –

-1
import os 
address = "my_ip_address" 
os.system('ping ' + address) 
+3

OK,你发个ping了,然后呢? – Elazar

+0

据我所知,问题不是关于通过网络的物理连接,而是关于tcp/udp连接 – oleg

4

您可以使用socket library

import socket 

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

嗨kadi,我试过这个,但是说​​Unknown Host甚至认为没有连接。 – Nethan

+0

嗨Nethan,如果主机不可达,这意味着这个地址上没有打开连接。 – kadi

2

据我了解的家伙正在寻找有效的连接FROM某些IP,这意味着他也希望在本地检查是否有活动的连接存在。它看起来像沿着netstat的线对我来说。有几个选项:

  1. 您可以使用psutilsthis后证实。您将希望循环活动进程并查询活动连接。

  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 
+0

非常感谢。 – Nethan