使用Python在本地网络上查找活动节点

2024-04-25 06:36:25 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

您要做的是ping本地网络中的活动节点。像this script这样使用Scapy就足够了。这个pure-python implementation可能是另一个更轻量级的选择。

为了获得当前的IP地址,您可能需要遵循this question中给出的解决方案之一。

前面提到的Ping类的扩展可以让您将结果拉回来阅读:

# TODO: This is a quick hack to retrieve the results 
# of the ping, you should probably do something a bit more elegant here!
class PingQuery(Ping):
    def __init__():
        super().__init__()
        result = false

    def print_success(self, delay, ip, packet_size, ip_header, icmp_header):
        result = ip

然后,您可以循环访问子网中的地址以查找活动计算机的列表:

subnet = "192.168.0." # TODO: Trim the last number off the IP address retrieved earlier
for i in range(1, 255):
    hostname = subnet + i
    p = PingQuery(hostname, 500, 55) # Timeout after 500ms per node
    p.run(1)
    if (p.result):
        print p.result + " is live"

之后,您可以通过尝试使用您选择的端口连接到每台计算机来询问活动的计算机,检查一个专门定制的TCP数据包,以证明侦听程序实际上是您的软件。

根据aki92的答案。。。

import re
import subprocess
# ...

nodes = re.findall(r'\\(.+?)(?: .*)?\n',subprocess.check_output('net view'))

Windows命令提示符下的“net view”命令解决了我提出的问题。

通过这个命令,我可以找到所有通过局域网连接到我的计算机的计算机,然后我将数据包发送到所有计算机,而回复我的数据包的计算机将是运行与我运行的软件相同的系统,这完全解决了我的问题。

此代码列出了通过LAN连接到我的计算机的所有计算机主机名。

import os
os.system('net view > conn.tmp')
f = open('conn.tmp', 'r')
f.readline();f.readline();f.readline()

conn = []
host = f.readline()
while host[0] == '\\':
    conn.append(host[2:host.find(' ')])
    host = f.readline()

print conn
f.close()    

相关问题 更多 >