【问题标题】:remote OS detection in pythonpython中的远程操作系统检测
【发布时间】:2015-01-25 07:20:42
【问题描述】:

我想使用python(如nmap)实现操作系统检测,我找到python-nmap-0.3.4.tar.gz库,但它没有提供操作系统响应! 我怎样才能改变它以实现我的目标。

编辑: 在site 示例中:

>>> 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;;

它找到 OS ,但是当我运行我自己的时它没有显示任何操作系统。 有没有查找远程操作系统的功能?

【问题讨论】:

  • 分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见how to ask

标签: python-3.x nmap os-detection


【解决方案1】:

尝试使用 -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']

【讨论】:

    【解决方案2】:

    如果您只需要操作系统名称,那么您可以这样做:

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

    这将提供操作系统名称 [例如:'Linux']

    【讨论】:

      最近更新 更多