2011-02-17 85 views
1

如何檢查python中IP地址的可用性?IP地址的可用性 - Python

例如,我wan't到我的系統的IP地址更改爲192.168.112.226靜態重寫DHCP提供的地址。默認網關是192.168.112.1。但我不想在分配給自己之前檢查是否有人使用192.168.112.226。

通常在bash的命令行中執行此操作。我檢查ping 192.168.112.226。如果主機無法訪問,我使用'ifconfig'和'route'將其分配給我自己。

如何使用python自動執行此操作?

PS:我更喜歡Python,所以我可以使用python-notify來美化輸出是否成功或失敗。

+1

您需要在網絡上安裝DHCP服務器。 – Keith

+0

我不想使用dhcp進行分配。 DHCP已經可用。但我想爲我的系統分配一個靜態IP,覆蓋DHCP提供的靜態IP。但在重寫之前,我想確保它不分配給網絡中的任何其他系統。我不想使用ping。應該以某種方式通過編程方式找到它。 – Bharathwaaj

+0

我很好奇原因是什麼? – Keith

回答

0

好的,如果你想使用bash,你可以導入os模塊或子進程模塊。

例如:

import os 
command = os.system('pint 192.168.112.226') 
if command == 0: #Sucess 
    #write os.system() and give it ifconfig and route commands as parameter. 
else: print "This IP is used by another person in your network." 

你可以閱讀更多關於蟒蛇使用os.system和子,通過導入和寫作help(subprocess)例如。

+0

我不想使用ping。它永遠不會出來。 – Bharathwaaj

+1

這種方法有幾個問題。一個是ping命令永遠不會結束。您需要使用-c選項'ping -c 1 192.168.112.226'來限制ping的數量。在Unix上,系統命令不僅返回錯誤級別,而且返回包含狀態和原因的打包返回值。你必須像這樣解壓縮它:'rv = WEXITSTATUS(os.system(cmd))== 0' – Keith

+0

@Keith它應該是os.WEXITSTATUS。這是迄今爲止最好的解決方案。謝謝! – Bharathwaaj

0

您可以使用socket.gethostbyaddr()查找IP地址是否正在使用中。

import sys, os, socket 

# Stores the IP Address 
ip_address = sys.argv[1] 

try: 
    socket.gethostbyaddr(ip_address) 
    # If previous line doesn't throw exception, IP address is being used by someone 
    print "No" 
except socket.herror: 
    # socket.gethostbyaddr() throws error, so IP is not being used at present 
    # You can write os.system() and give it ifconfig and route commands as parameter. 
    print "Yes" 

這段代碼的問題是,method.gethostbyaddr()花費大量的時間來扔socket.herror如果IP地址不在網絡上使用。

python isIPAvailable.py 192.168.112.226 
+0

我不知道這種方法是否正確。因爲我剛纔發現這個問題。我會給出重現的步驟。首先,dhcp服務器將192.168.112.143分配給我的系統。然後我用ifconfig將它覆蓋到192.168.112.226。現在,如果我檢查python isIPAvailable.py 192.168.112.143,它告訴不可用。 – Bharathwaaj

+0

@Bharathwaaj我剛剛做了同樣的事情,但它工作。在覆蓋192.168.112.226的IP地址後,您是否ping通192.168.112.143? – Trivikram

+0

是的。基本上在我重新分配給192.168.112.226之後,應該可以使用192.168.112.142。 – Bharathwaaj

1

這是在很多方面我甚至無法解釋如何awfull這是如此糟糕:

如果命名該腳本isIPAvailable.py,那麼就可以通過調用。

你爲什麼要這樣?您能否告訴我們,我們可以想出比這種極其糟糕的「溶劑」更好的答案?

如果你有一個Linux/Unix系統中,你可以讓你的DHCP客戶端請求DHCP服務器給你一個具體的IP地址,如果DHCP服務器知道它是免費的。如何做到這一點取決於分佈。

我發現有兩個問題需要用「sollution」來創建。

  • 由於一些其他的寫,你可以檢查看到,IP是「自由」的權利,但擁有該IP地址的機器可能會測試後立即開始。使用它的IP地址,你綁架了。

  • 如果DHCP服務器不知道你綁架了一個IP地址呢,它可以給它給別人。

無論它將打破該計算機和你的網絡,產生大量的工作,並可能憤怒/網絡管理員。你不想那樣做,是嗎?

+0

我完全理解你的觀點,但我想他只是爲了好玩和學習python而在家裏用adsl路由器試試這個。 我想:) – Pitto

+1

皮託,即使這種使用是非常糟糕的。 – Anders