我正在尝试查找网络上的所有Windows计算机。每当程序在网络中找到并运行的计算机时,它将为该计算机打开一个新文件。在文件中,我想查看机器的名称及其IP地址。
一旦我完成了这项工作,我想将特定计算机上安装的应用程序记录到该计算机的文件中,这就是为什么我为该程序找到的每台计算机都有一个新文件。
但是,当我运行它时,机器每次都有相同的名称。我尝试使用导入套接字,但每当我使用它附带的任何方法时,我都会收到错误,说明套接字没有属性。我需要从套接字导入*为我的is_up方法工作。
这是我的代码:
from socket import *
ipa = '192.168.1.'
def is_up(adr):
s = socket(AF_INET, SOCK_STREAM)
s.settimeout(0.01)
if not s.connect_ex((adr, 135)):
s.close()
return 1
else:
s.close()
def main():
for i in range(1, 256):
adr = ipa + str(i)
if is_up(adr):
f = open("Machine " + str(i) + ".txt", "w+")
f.write('%s \t- %s \n' % ("Name: " + gethostname(), adr))
if is_up(adr):
print(gethostbyaddr(adr))
main()
修改:我在此处添加新代码以反映gethostbyaddr(adr)
的使用情况。我仍然收到以下错误:
[Errno 11004]未找到主持人
def main():
for i in range(1, 256):
adr = ipa + str(i)
if is_up(adr):
print(gethostbyaddr(adr))
追溯:
Traceback (most recent call last):
File "C:/Users/eread/PycharmProjects/SoftwareScanner/SoftwareScanner", line 30, in <module>
main()
File "C:/Users/eread/PycharmProjects/SoftwareScanner/SoftwareScanner", line 20, in main
print(gethostbyaddr(adr))
socket.herror: [Errno 11004] host not found
答案 0 :(得分:0)
此处的问题是用于获取主机名的函数,gethostname()
返回您正在执行脚本的计算机的名称。
如果你想要正在检查的远程机器的名称,你需要另一个函数,如gethostbyaddr
,它返回一个由3个成员组成的元组:名称,别名列表和IP列表
if is_up(adr):
print(gethostbyaddr(adr))
#>>> ('machine_name', [], ['192.168.1.14'])
使用这样一个函数的另一个好处是,当你在一个对象中获得所有细节时,我认为你不需要使用文件来存储它们,至少在你在脚本的第二部分使用它们之前。
您可以解压缩gethostbyaddr
返回的值,以在下一部分中声明所需的变量:
host_name, _, adresses = gethostbyaddr(adr)
print(host_name)
print(adresses[0]) #this member is a list, use index to access the first
#>>> result :
#machine_name
#192.168.1.14