Вызовите имя хоста python-nmap (), ничего не происходит

По какой-то причине, когда я вызываю hostname(), ничего не происходит и ничего не возвращает. Вот фрагмент кода, где я его использовал:

        print("save output as txt?")
        m = input("y/n: ")
        for c in m:
            if m == "y":
                write = True
            elif m == "n":
                write = False
        nm = nmap.PortScanner(nmap_search_path=('nmap', '/usr/bin/nmap', '/usr/local/bin/nmap', '/sw/bin/nmap', '/opt/local/bin/nmap', 'C:/Program Files(x86)/Nmap'))
        nm.scan(hosts='192.168.1.0/24', arguments='-n -sP')
        hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]
        for host, status in hosts_list:
            print(host + ' ' + status )
            print(nm[host].hostname()) # < my problem
            if write == True:
                with open('log.txt', 'a') as f:
                    f. write('\n' + host + ' ' + status)  

Все работает, кроме строки 14, где я вызываю hostname(). Может ли кто-нибудь объяснить, что я делаю неправильно? Спасибо.


person johnboy13    schedule 22.02.2018    source источник


Ответы (1)


Это потому, что IP-адрес, который вы пытаетесь получить в качестве имени хоста, не имеет имени. Я рекомендую вам распечатать объект и посмотреть, есть ли у него параметр «имя».

Я проверил это, и это работает хорошо.

>>> nm.scan('8.8.8.8', '22')
{'nmap': {'command_line': 'nmap -oX - -p 22 -sV 8.8.8.8', 'scaninfo': {'tcp': {'method': 'connect', 'services': '22'}}, 'scanstats': {'downhosts': '0', 'uphosts': '1', 'timestr': 'Fri Feb 23 11:15:33 2018', 'elapsed': '0.51', 'totalhosts': '1'}}, 'scan': {'8.8.8.8': {'vendor': {}, 'status': {'state': 'up', 'reason': 'syn-ack'}, 'addresses': {'ipv4': '8.8.8.8'}, 'hostnames': [{'name': 'google-public-dns-a.google.com', 'type': 'PTR'}], 'tcp': {22: {'extrainfo': '', 'state': 'filtered', 'reason': 'no-response', 'version': '', 'name': 'ssh', 'product': '', 'cpe': '', 'conf': '3'}}}}}
>>> nm['8.8.8.8'].hostname()
'google-public-dns-a.google.com'
>>> nm.scan('192.168.2.100', '22')
{'nmap': {'command_line': 'nmap -oX - -p 22 -sV 192.168.2.100', 'scaninfo': {'tcp': {'method': 'connect', 'services': '22'}}, 'scanstats': {'downhosts': '0', 'uphosts': '1', 'timestr': 'Fri Feb 23 11:15:46 2018', 'elapsed': '0.39', 'totalhosts': '1'}}, 'scan': {'192.168.2.100': {'vendor': {}, 'status': {'state': 'up', 'reason': 'syn-ack'}, 'addresses': {'ipv4': '192.168.2.100'}, 'hostnames': [{'name': '', 'type': ''}], 'tcp': {22: {'extrainfo': 'protocol 2.0', 'state': 'open', 'reason': 'syn-ack', 'version': '7.6', 'name': 'ssh', 'product': 'OpenSSH', 'cpe': 'cpe:/a:openbsd:openssh:7.6', 'conf': '10'}}}}}
>>> nm['192.168.2.100'].hostname()
''
person sinkmanu    schedule 23.02.2018