Обнаружение удаленной ОС в python

Я хочу реализовать обнаружение ОС, используя python (например, nmap), я нахожу библиотеку python-nmap-0.3.4.tar.gz, но она не предоставила операционную систему в ответ! Как я могу изменить это, чтобы достичь своей цели.

РЕДАКТИРОВАТЬ: в образце сайта:

>>> import nmap
>>> nm = nmap.PortScanner()
>>> nm.scan('127.0.0.1', '22-443')
>>> print(nm.csv())
host;protocol;port;name;state;product;extrainfo;reason;version;conf
127.0.0.1;tcp;22;ssh;open;OpenSSH;protocol 2.0;syn-ack;5.9p1 Debian 5ubuntu1;10
127.0.0.1;tcp;25;smtp;open;Exim smtpd;;syn-ack;4.76;10
127.0.0.1;tcp;53;domain;open;dnsmasq;;syn-ack;2.59;10
127.0.0.1;tcp;80;http;open;Apache httpd;(Ubuntu);syn-ack;2.2.22;10
127.0.0.1;tcp;111;rpcbind;open;;;syn-ack;;10
127.0.0.1;tcp;139;netbios-ssn;open;Samba smbd;workgroup: WORKGROUP;syn-ack;3.X;10
127.0.0.1;tcp;443;;open;;;syn-ack;;

он находит ОС, но когда я запускаю свою собственную, он не показывает никакой ОС. есть ли функция для поиска удаленной ОС?

2 ответа

Попробуйте с опцией -O

nm.scan('scanme.nmap.org', arguments='-O')

Проблема в том, что информация не появится, если вы

print(nm.csv())

Так что вы должны сделать цикл

nm.scan("127.0.0.1", arguments="-O")
if 'osclass' in nm['127.0.0.1']:
    for osclass in nm['127.0.0.1']['osclass']:
        print('OsClass.type : {0}'.format(osclass['type']))
        print('OsClass.vendor : {0}'.format(osclass['vendor']))
        print('OsClass.osfamily : {0}'.format(osclass['osfamily']))
        print('OsClass.osgen : {0}'.format(osclass['osgen']))
        print('OsClass.accuracy : {0}'.format(osclass['accuracy']))
        print('')

Дополнительная информация https://bitbucket.org/xael/python-nmap/src/391178ab25a20d7b5edbca51e187f93dc1c16ad2/example.py?at=default&fileviewer=file-view-default

PS: вам нужен Python 3.x, я не думаю, что он работает с Python 2.x

РЕДАКТИРОВАТЬ Конечно, вы можете получить доступ напрямую

print nm['127.0.0.1']['osclass']

Или же

print nm['127.0.0.1']['osclass']['vendor']

import nmap nm = nmap.PortScanner() machine = nm.scan('',arguments='-O') print machine['scan']['']['osmatch'][0]['osclass'][0]['osfamily']

Это обеспечит имя ОС [например: "Linux"]

Другие вопросы по тегам