2013-05-29 63 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