簡體   English   中英

Python - 在運行相同應用程序的網絡上獲取計算機的IP地址和主機名

[英]Python - Get computer's IP address and host name on network running same application

需要明確的是:我剛剛在2周前開始使用Python,但我是C#,ASP,PHP,JavaScript開發人員。

我剛剛用Python和PyQt開始了一個新項目,我希望我的項目能夠成為一台服務器,能夠在其他計算機上與該服務器的其他實例進行通信。

所以,我需要獲取計算機的IP地址和主機名。

首先,我考慮使用MSDOS“net view”命令,但這是在我的工作中嘗試此命令之前,並且發現這可能需要大約15秒(我認為這太慢了)。

我有這個想法: https//stackoverflow.com/a/15497083/1598891

此外,“net view”命令可以返回不再在網絡上的計算機,並在嘗試按主機名獲取其IP地址時導致異常(每次無法訪問計算機時也會減慢進程)。

我的問題:有沒有辦法讓本地網絡上的所有計算機IP和主機名都不通過Windows上的網絡net view ,因為net view可能是一個緩慢的操作?

另外, 有沒有辦法只獲得運行我的應用程序的計算機? (所以它會更快)

提前致謝

對於localhost的主機名和ip,您可以使用套接字模塊和gethostname以及gethostbyname方法:

import socket

hostname = socket.gethostname()
IP = socket.gethostbyname(hostname)

如果你想獲得運行python腳本的主機的IP地址,那么user2096338提供的答案就是你要去的地方。

為了發現局域網內網絡上的所有計算機,您可以使用scapy https://github.com/bwaldvogel/neighbourhood/blob/master/neighbourhood.py是我在瀏覽類似的 SO問題時找到的鏈接; 它可以發現網絡(LAN)中的所有計算機。

如果要確保上述腳本僅返回運行服務器的計算機 - 那么有多種方法可以執行此操作,下面按可移植性順序列出

  1. 每當您在主機上安裝服務器時,請將自身注冊到中央數據庫,然后可以通過新服務實例查詢該數據庫以識別運行對等服務器的所有計算機
  2. 使用WMI(因為您在Windows上)查詢在對等系統上運行的所有進程,並檢查您的服務器進程是否是其中之一。
  3. 您的服務器將保持探測端口打開,並且新的服務器安裝將在該探測端口上針對網絡中的每個主機ping服務器。 如果它得到響應,則此計算機正在運行服務器進程。

在我看來,方法1是最安全和最便攜的,因為它可以防止打開不必要的端口(如方法3),這些端口是安全漏洞(取決於你的python腳本運行的上下文)。 它也不依賴於遠程主機上WMI服務的可用性(某些系統可能禁用了WMI)。

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM