Попытка записать имя хоста в файл каждый раз, когда цикл находит новую машину в сети - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь найти все компьютеры 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 :

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

1 Ответ

0 голосов
/ 21 мая 2018

Проблема здесь заключается в функции, используемой для получения имени хоста, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...