モジュールの機能
Nmapのモジュールは、現在、以下の様々な機能を持っています。
- ホスト発見。ターゲットコンピュータに情報を送信し、それは目的とする反応に応じてオンし、ネットワークの状態であるかどうかを決定します。
- ポートスキャン。ターゲットコンピュータに情報を送信するポートを指定し、それは反応に従って宛先ポート開口か否かが判断されます。
- サービスとバージョン検出。特別なメッセージを送信するには、ターゲットコンピュータのポートを指定し、それが目標の反応に応じてサービスを実行している種類とバージョンを検出するのに役立ちます。
- OS検出。
これらの基本的な機能に加えて、Nmapにはまた、偽のようないくつかの高度な監査技術は、同一の走査側、秘密走査、防衛機器の対象(ファイアウォールなど)、システムのセキュリティの脆弱性検出を回避するために、包括的なを提供することを開始達成しましたオプションを報告します。その後、一定の開発では、NmapのNSEの強力なスクリプトエンジンの導入により、誰もがNmapのに自分の新しいモジュールを追加することができます。
Nmapは、そのモジュールをインストールします。
WindowsのNmapのインストールは、それをダウンロードして公式サイトに行く、問題に遭遇著者は特別な注意がなされており、これはノートリンク
ここで我々はモジュールをインストールすることを強調するために必要なのpython-nmapの代わりにnmapのを覚えて覚えて、!あなたが間違ったモジュールをインストールした場合、背後には、完全な具体化することができません!
pip install python-nmap #安装模块命令
基本的な使い方
- python-nmapのモジュールインスタンス化
パッケージNmapのツールの機能を実装する最も一般的に使用されるポートスキャンクラス。インスタンス化このクラスは、ちょうど次の文を実現することができ、非常に簡単です。
import nmap
nm=nmap.PortScanner()
次のようにPortScannerAsyncクラスとクラスのポートスキャン、同様の機能が、このクラスは、このクラスの非同期スキャンインスタンス化ステートメントを実装することができますがあります。
import nmap
nm=nmap.PortScannerAsync()
- python-nmapの機能で
以下のいくつかの機能が含まれているポートスキャンクラスで初見。
スキャン()関数:関数は、完全な形のスキャンである(自己、ホスト=「127.0.0.1 」、ポート=なし、引数=「 - SV」、須藤= False)が、 走査するために使用されるターゲティング。
この文字列型の内部値パラメータホストは、ホストをスキャンすることを示し、IPアドレスはドメイン名があってもよく、例えば、「192.168.1.1」の形態であってもよく、例えば、「www.nmap.org」
パラメータの値は、ポートスキャンする、ポートの文字列型です。あなたは、単一のポートをスキャンしたい場合は、「80」を形成することができます 複数のポートは、例えば、「80、443」としてコンマによって分離することができる場合 スキャンがポート範囲に連続している場合は、行と「1から5000まで。」、例えば、
パラメータの値は、引数の文字列型で、このパラメータは、実際にNmapのスキャンパラメータを使用しています。
パラメータ | 効果 |
---|---|
-The | スキャニングシステム |
-V、-v、-D、-d、-p | デバッグ情報 |
-ファジー | OSの検出結果を推測 |
-sT | TCPポートスキャン(完全な3ウェイハンドシェイク) |
-sU | UDPポートスキャン(応答が近くに応じて、開いているかもしれません) |
-SL | リバースDNS |
-sS | 隠しスキャン(ハーフオープンSYN) |
-sP | 私たちは、(直接、ARP、直接TCP80、ICMP接続されていない)生きているホストを見つけました |
-そう | ホスト契約を決定するためにスキャン |
-SW | スライディングウィンドウスキャン |
SA | TCP ACKスキャン |
-sN | ホストスキャンをオフにします(直接の生存スキャンするかどうか) |
-sF | フィンスキャン |
-sx | クリスマススキャン(フィンのPSH URGが設定されています) |
-and | 完全に隠された(ホストのための踏み台(流れがない)と、別のホストをスキャン) |
-en | Serverバージョン |
-sC | セキュリティに関連したスクリプト |
-PN | 独自のスキャン |
これらは、多くの、それらを多く表示しないありますが、私のお気に入りのコマンド==パラメータです。
あなたはTCPスキャンを行うために500に192.168.1.101ポート1にしたい場合は、次のコマンドを使用することができます。
import nmap
nm = nmap.PortScanner()
nm.scan('192.168.1.101','1-500','-sS')
all_hosts()関数:スキャンされているすべてのホストのリストを返します。
COMMAND_LINE()関数:現在の走査線で使用されるリターン命令。
CSV()関数の戻り値は、CSVの出力である(コンマは、ファイルフォーマットを分離)。
あなたはより明確に、出力CSV()コンテンツを印刷できることを確認したい場合。
has_host(自己、ホスト)機能:これがTrueを返す場合、そうでなければFalseを、スキャンホストの結果を確認してください。
scaninfo()関数:スキャンリスト情報の構造。
あなた自身が、それを実践することはできませんここではあまり説明をしないいくつかの一般的な操作があります。
PortScannerAsyncクラスはスキャン()、使用状況やスキャンポートスキャンクラス()基本的に同じの最も重要な機能であるが、より多くのコールバック関数より。フルスキャン()関数形式のスキャン(自己、ホスト= '127.0.0.1'、ポート=なし、引数= ' - SV'、コールバック=なし、須藤= False)がコールバックがある(ホスト、scan_data)全体のネットワークセグメントをスキャン、あるパラメータの関数として。
import nmap
nm = nmap.PortScannerAsync()
nm.scan(hosts = '192.168.1.0/24',arguments = '-sP')
このクラスは、非同期実装するために使用する以下の3つの機能を提供します。
()still_scanning:スキャンが返される進行トゥーレにある場合は、それ以外の場合はFalseを返します。
待機(自己、タイムアウト=なし):待ち時間は関数を表します。
停止():ストップ・スキャン。
ポートスキャナを書きます
さて、今、私たちは、使用のpython-nmapのを理解して、あなたは、単純なポートスキャナを書くために、このモジュールを使用することができます。
import nmap #导入模块
nm = nmap.PortScanner() #导入函数
nm.scan('192.168.1.104','1-1000') #输入你要扫描的ip与道口
for host in nm.all_hosts(): #返回被扫描的主机列表给host
print('---------------------------------------------------------')
print('Host : %s (%s)' % (host,nm[host].hostname())) #nm[host].hostname()获取目标主机的主机名
print('State : %s' % nm[host].state()) #nm[host].state()获取主机的状态 |up|down|unknow|skipped|
for proto in nm[host].all_protocols(): #nm[host].all_protocols获取执行的协议['tcp','udp']
print('-----------------------------------------------------')
print('protocol : %s' % proto ) #输出执行的协议
lport = nm[host][proto].keys() #获取目标主机所开放的端口赋值给lport
# lport.sort()
for port in lport: #将lport赋值给port并遍历
print('port : %s\tstate : %s' % (port,nm[host][proto][port]['state'])) #输出扫描结果
- 結果:
ホストの生存スキャナを書きます
実際には、ここに新しい名前、良い経験のコードの2枚は、彼らが実際には非常に同じであることがわかります。
import nmap #导入模块
nm = nmap.PortScanner() #导入函数
nm.scan('192.168.1.0/24',arguments='-sP') #绑定网段与扫描模式
hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()] #定义字典
for host, status in hosts_list: #将字典里的状态赋值给host,status
print(host+" is "+status) #输出扫描结果
- 業績