python効率的なポートスキャナの基礎を実現

4432 ワード

ほんの少し
現在、インターネットセキュリティの情勢はますます厳しくなり、システム管理者に大きな挑戦をもたらし、ネットワークの開放性とハッカーの攻撃はネットワークの不安全をもたらす主な原因である.少し油断するとハッカーに乗れる機会をもたらし、企業に補うことができない損失をもたらす.例えば、システム管理者の誤操作により、コアビジネスサーバの22、21、3389、3306などの高危険ポートがインターネットに露出し、侵入のリスクが大幅に高まった.そのため、この安全事故を回避するメカニズムをカスタマイズすることが急がれている.
Pythonのサードパーティモジュールpythonnmapは、効率的なポートスキャンを実現し、異常が発見された場合、最初の時間に発見して処理し、セキュリティリスクを最小限に抑える目的を達成します.python-nmapモジュールはnmapコマンドのPythonパッケージとして機能し、Pythonがnmapスキャナを簡単に操作でき、管理者が自動スキャンタスクを完了し、レポートを生成するのに役立ちます.
二取付
1 nmapツールのインストール
[root@localhost data]# yum -y install nmap

2 python-nmapのインストール
[root@localhost data]# pip install python-nmap

3つのモジュールの一般的な方法の説明
本編ではpython-nmapモジュールの2つの一般的なクラスを紹介し、1つはPortScanner()クラスであり、1つのnmapツールのポートスキャン機能パッケージを実現する.もう1つはPortScannerHostDict()クラスで、ホストへのストレージとアクセスのスキャン結果を実現します.以下に説明します.
PortScanner()クラスのいくつかの一般的な方法. 
1 scan(self,hosts='127.0.0.1',ports=None,arguments='-sV')
指定したホスト、ポート、nmapコマンドラインパラメータのスキャンを実現します.
  • hosts:文字列タイプで、スキャンのホストアドレスを表し、フォーマットは「scanme.nmap.org」、「198.16.0-255.1-127」、「216.163.128.20/20」で表すことができる. 
  • ports:文字列タイプ、スキャンを表すポートは、「22,53110143-4564」で表すことができます.
  • argumentsは文字列タイプであり、nmapコマンドラインパラメータを表し、フォーマットは「-sU-sX-sC」である.

  • 例:
    >>> import nmap
    >>> nm = nmap.PortScanner()
    >>> nm.scan('192.168.0.21-120','3310')
    {'nmap': {'scanstats': {'uphosts': '2', 'timestr': 'Sun Feb 24 10:32:00 2019', 'downhosts': '98', 'totalhosts': '100', 'elapsed': '9.31'}, 'scaninfo': {'tcp': {'services': '3310', 'method': 'syn'}}, 'command_line': 'nmap -oX - -p 3310 -sV 192.168.0.21-120'}, 'scan': {'192.168.0.120': {'status': {'state': 'up', 'reason': 'localhost-response'}, 'hostnames': [{'type': '', 'name': ''}], 'vendor': {}, 'addresses': {'ipv4': '192.168.0.120'}, 'tcp': {3310: {'product': 'Clam AV', 'state': 'open', 'version': '', 'name': 'clam', 'conf': '10', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': ''}}}, '192.168.0.106': {'status': {'state': 'up', 'reason': 'arp-response'}, 'hostnames': [{'type': '', 'name': ''}], 'vendor': {}, 'addresses': {'mac': '64:6E:69:F2:CF:0D', 'ipv4': '192.168.0.106'}, 'tcp': {3310: {'product': '', 'state': 'filtered', 'version': '', 'name': 'dyna-access', 'conf': '3', 'extrainfo': '', 'reason': 'no-response', 'cpe': ''}}}}}

    2 command_line(self)
    返されるスキャンメソッドは、特定のnmapコマンドラインにマッピングされます.
    例:
    >>> nm.command_line()
    'nmap -oX - -p 3310 -sV 192.168.0.21-120'

    3 scaninfo(self)メソッドは、nmapスキャン情報を返し、辞書タイプのフォーマットを返します.
    >>> nm.scaninfo()
    {'tcp': {'services': '3310', 'method': 'syn'}}

    4 all_hosts(self)メソッドは、nmapスキャンのホストリストを返します.フォーマットはリストタイプです.
    >>> nm.all_hosts()
    ['192.168.0.106', '192.168.0.120']

    5 PortScannerHostDict()クラスの一般的な方法
    >>> nm['192.168.0.120'].hostname()             #           
    ''
    >>> nm['192.168.0.120'].state()                #          ,  4   (up、 down、unknown、skipped)
    'up'
    >>> nm['192.168.0.120'].all_protocols()        #        
    ['tcp']
    >>>
    >>> nm['192.168.0.120'].all_tcp()              #   TCP       
    [3310]
    >>> nm['192.168.0.120'].tcp(3310)              #     TCP  port(  )   
    {'product': 'Clam AV', 'state': 'open', 'version': '', 'name': 'clam', 'conf': '10', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': ''}