Nmap是一個網絡連接端掃描軟件,用來掃描網上電腦開放的網絡連接端。確定哪些服務運行在哪些連接端,並且推斷計算機運行哪個操作系統(這是亦稱 fingerprinting)。其基本功能有三個,一是探測一組主機是否在線;其次是掃描 主機端口,嗅探所提供的網絡服務;還可以推斷主機所用的操作系統 。它 以隱秘的手法,避開闖入檢測系統的監視,並盡可能不影響目標系統的日常操作,因此也常被黑客所青睞。本文以Centos7為例,用python實現NMAP進行端口掃描。
一、安裝NMAP
1.下載NMAP源碼
cd /usr/src
git clone https://github.com/nmap/nmap.git
2.進行編譯安裝
cd nmap
./configure

(若安裝過程中報錯,如make[1]:g++:conmand not found等,則需要安裝一下依賴庫)
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
接下來進行編譯
make
make install

出現以上界面表示安裝成功
3.清除安裝時生成的臨時文件
make clean
4.查看nmap的版本
nmap version

成功安裝nmap
二、安裝python-nmap
直接通過pip安裝(若linux環境下無pip可自行安裝)
python -m pip install python-nmap
三、功能實現
安裝好以上工具之后,將Nmap import到腳本中,就可以使用Nmap掃描功能了。PortScanner類對象能完成掃描功能,PortScanner類有一個scan()函數,它可將目標和端口的列表作為參數輸入,並對他們進行基本的Nmap掃描功能。另外,還可以把目標主機的地址/端口放入數組中備查,並打印出端口的狀態。在接下來的部分中,依靠該功能來定位和識別目標。
#!/usr/bin/env Python import nmap import optparse def nmapScan(tgtHost,tgtPort): nmScan=nmap.PortScanner() nmScan.scan(tgtHost,tgtPort) state=nmScan[tgtHost]['tcp'][int (tgtPort)]['state'] print("[*]"+tgtHost+" tcp/"+tgtPort+""+state) def main(): parser=optparse.OptionParser('using%prog'+'-H <target host> -p <target port>') parser.add_option('-H',dest='tgtHost',type='string',help='specify target host') parser.add_option('-p',dest='tgtPort',type='string',help='specify target port[s] separated by comma') (options,args)=parser.parse_args() tgtHost=options.tgtHost tgtPorts=str(options.tgtPort).split(',') if (tgtHost==None)|(tgtPorts[0]==None): print(parser.usage) exit(0) for tgtPort in tgtPorts: nmapScan(tgtHost,tgtPort) if __name__ =='__main__': main()
實例如下:
python scan-nmap.py -H 172.22.32.12 -p 21,1720,88,22,25,49,69,80,107,115,161,163,443,514

