要明确一点:我刚刚在2周前开始使用Python,但我是C#,ASP,PHP,JavaScript开发人员。
我刚刚开始使用Python和PyQt开发一个新项目,我希望我的项目能够成为一台服务器,能够在其他计算机上与该服务器的其他实例进行通信。
所以,我需要获取计算机的IP地址和主机名。
首先,我考虑使用MSDOS“net view”命令,但这是在我的工作中尝试此命令之前,并且发现这可能需要大约15秒(我认为这太慢了)。
我从https://stackoverflow.com/a/15497083/1598891
获得了这个想法此外,“net view”命令可以返回不再在网络上的计算机,并在尝试按主机名获取其IP地址时导致异常(每次无法访问计算机时也会降低进程的速度)。
我的问题:有没有办法让本地网络上的所有计算机IP和主机名都不通过net view
在Windows上,因为net view
可能是一个缓慢的操作?
另外,有没有办法让计算机运行我的应用程序?(所以它会更快)
提前致谢
答案 0 :(得分:20)
对于localhost的主机名和ip,您可以使用套接字模块和gethostname以及gethostbyname方法:
import socket
hostname = socket.gethostname()
IP = socket.gethostbyname(hostname)
答案 1 :(得分:5)
如果您想获取运行python脚本的主机的IP地址,那么 user2096338 提供的答案就是您的选择。
要发现局域网内网络上的所有计算机,您可以使用scapy。 https://github.com/bwaldvogel/neighbourhood/blob/master/neighbourhood.py是我在浏览similar SO问题时找到的链接;它可以发现网络(LAN)中的所有计算机。
如果您想确保上述脚本仅返回运行您服务器的计算机 - 那么有多种方法可以执行此操作,下面按可移植性顺序列出
在我看来,方法1是最安全和最便携的,因为它可以防止打开不必要的端口(如方法3),这些端口是安全漏洞(取决于你的python脚本运行的上下文)。它也不依赖于远程主机上WMI服务的可用性(某些系统可能禁用了WMI)。
希望这有帮助