基于Python編寫一個(gè)簡單的端口掃描器
端口掃描是非常實(shí)用的,不止用在信息安全方面,日常的運(yùn)維也用得到。這方面的工具也不要太多,搞過 CTF 的朋友會(huì)告訴你有多少端口掃描工具,那為什么還要用 Python 再自己實(shí)現(xiàn)一遍?這個(gè)問題就像飯店里的菜已經(jīng)很好吃了,為什么還要自己燒菜一樣,主要還是為了適合自己的口味,添加自己需要的個(gè)性功能。
今天我們將用 20 行代碼編寫一個(gè)簡單的端口掃描器。讓我們開始吧!
1、需要的庫
都是標(biāo)準(zhǔn)庫,因此內(nèi)網(wǎng)環(huán)境也不影響:
import?socket import?argparse import?sys import?time
套接字庫是一個(gè)低級(jí)網(wǎng)絡(luò)接口庫,它允許我們?cè)谀_本中創(chuàng)建網(wǎng)絡(luò)連接。argparse 庫用于解釋傳遞給我們腳本的參數(shù)。sys 庫允許我們與系統(tǒng)交互。最后,time 庫用來統(tǒng)計(jì)耗時(shí)。
2、獲取一個(gè) host 地址
parser?=?argparse.ArgumentParser() parser.add_argument('host') args?=?parser.parse_args()
這樣腳本在運(yùn)行的時(shí)候,第一個(gè)參數(shù)就可以傳入一個(gè)主機(jī)名或 ip 地址,下文就可以通過 args.host 來使用。
3、循環(huán)所有的端口
端口占用 2 個(gè)字節(jié),因此其范圍是 1-65535
start?=?time.time() try: ????for?port?in?range(1,?65536): ????????sock?=?socket.socket(socket.AF_INET,?socket.SOCK_STREAM) ????????sock.settimeout(1) ????????result?=?sock.connect_ex((args.host,?port)) ????????if?result?==?0: ????????????print("Port:?{}?Open".format(port)) ????????sock.close() except?KeyboardInterrupt: ????sys.exit() end?=?time.time()
如果 sock.connect_ex 返回了 0 說明端口開放,為了讓程序正常退出,我們加上 try except 來捕獲鍵盤發(fā)起的中斷。
4、完整腳本
一旦 for 循環(huán)完成并掃描了所有端口,我們將獲取時(shí)間并打印出腳本運(yùn)行的時(shí)間:
import?socket import?argparse import?sys import?time parser?=?argparse.ArgumentParser() parser.add_argument('host') args?=?parser.parse_args() start?=?time.time() try: ????for?port?in?range(1,?65536): ????????sock?=?socket.socket(socket.AF_INET,?socket.SOCK_STREAM) ????????sock.settimeout(1) ????????result?=?sock.connect_ex((args.host,?port)) ????????if?result?==?0: ????????????print("Port:?{}?Open".format(port)) ????????sock.close() except?KeyboardInterrupt: ????sys.exit() end?=?time.time() print(f"Scanning?completed?in:?{end-start:.3f}s")
除去空行,代碼一共 20 行,運(yùn)行效果如下:
到此這篇關(guān)于基于Python編寫一個(gè)簡單的端口掃描器的文章就介紹到這了,更多相關(guān)Python端口掃描器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python天氣預(yù)報(bào)采集器實(shí)現(xiàn)代碼(網(wǎng)頁爬蟲)
這個(gè)天氣預(yù)報(bào)采集是從中國天氣網(wǎng)提取廣東省內(nèi)主要城市的天氣并回顯。本來是打算采集騰訊天氣的,但是貌似它的數(shù)據(jù)是用js寫上去還是什么的,得到的html文本中不包含數(shù)據(jù),所以就算了2012-10-10python格式化輸出%s與format()的用法對(duì)比
這篇文章主要為大家介紹了python格式化輸出%s與format()的用法對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10使用python編寫android截屏腳本雙擊運(yùn)行即可
使用python編寫一個(gè)截屏的腳本,雙擊運(yùn)行腳本就OK,截屏成功后會(huì)將截屏文件已當(dāng)前時(shí)間命名,并保存在存放腳本的當(dāng)前路徑的screenshot文件夾下2014-07-07如何從csv文件構(gòu)建Tensorflow的數(shù)據(jù)集
這篇文章主要介紹了如何從csv文件構(gòu)建Tensorflow的數(shù)據(jù)集,幫助大家更好的理解和使用Tensorflow,感興趣的朋友可以了解下2020-09-09Jupyter Notebook 實(shí)現(xiàn)正常顯示中文和負(fù)號(hào)
這篇文章主要介紹了Jupyter Notebook 實(shí)現(xiàn)正常顯示中文和負(fù)號(hào),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python畫圖工具M(jìn)atplotlib庫常用命令簡述
這篇文章主要介紹了Python畫圖Matplotlib庫常用命令簡述總結(jié),文中包含詳細(xì)的圖文示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09