tft每日頭條

 > 生活

 > 端口掃描有什麼用處

端口掃描有什麼用處

生活 更新时间:2024-12-26 09:51:32

這篇文章我們來了解端口掃描的相關内容,下文講給大家介紹nmap探測端口、masscan探測端口、socket探測端口、telnet探測端口、nc探測端口這五種端口掃描方式。感興趣的朋友就繼續往下看吧!

事件原由

筆者在寫一個小工具,針對滲透測試中需要搜集的信息,使用腳本自動化采集。而在這個模塊中有個很難搞的部分就是端口banner 信息搜集,起初我嘗試使用了python nmap 多線程掃描,掃描20 的ip,等的花都謝了。。。而筆者目标是掃描200 的ip。下面我就針對端口掃描的技術進行分析。

1、nmap探測端口

nmap在掃描多個主機的時候可以設置參數 --min-hostgroup ,設置這個參數可以并行掃描多個主機,将這些主機劃分成組,然後一次掃描一個組。

舉例:

--min-hostgroup 50 nmap 以50個主機為一組,在掃描完50個主機之前不會顯示結果。

#coding=utf-8 import nmap from queue import Queue from threading import Thread def portscan(ip): portlist = [] nm = nmap.PortScannerYield() for r in nm.scan(ip,ports='1-10000',arguments='-sS --min-hostgroup'): m = r[1]['scan'][ip]['tcp'] for p in m: temp = str(p) "----" m[p]['state'] portlist.append(temp) print(portlist) class Consumer(Thread): def __init__(self, q): Thread.__init__(self) self.q = q def run(self): while not self.q.empty(): ip = self.q.get() try: portscan(ip) except Exception as e: print(e) continue def producer(ip_list): num = 10 threads = [] q = Queue() for i in ip_list: print(i) q.put(i) threads = [Consumer(q) for i in range(0,int(num))] for t in threads: t.start() for t in threads: t.join() ip_list =['120.78.207.76', '120.78.207.231', '120.78.207.18', '120.78.207.233', '120.78.207.165', '120.78.207.48', '120.78.207.112', '120.78.207.27', '120.78.207.51', '120.78.207.8'] producer(ip_list)

端口掃描有什麼用處(端口掃描方式有哪一些)1

如圖,運行10個ip需要318s。

2、masscan探測端口

(1)調用python masscan

默認情況下,masscan 發送的是syn數據包,如果目标主機返回ack syn,則說明端口開放。具體流程如下

A:192.168.70.142

B:192.168.0.143 開放端口3306

(1)A->B SYN

(2)B->A syn ack

(3)A->B RST

端口掃描有什麼用處(端口掃描方式有哪一些)2

探測未開放的端口

A->B syn

B->A rst

端口掃描有什麼用處(端口掃描方式有哪一些)3

舉例:

def portscan(ip): mas = masscan.PortScanner() mas.scan(ip,ports='1-65535') print(mas.scan_result)

使用系統命令探測

使用方法

掃描掃描443端口的B類子網 Masscan 10.11.0.0/16 -p443 掃描80或443端口的B類子網 Masscan 10.11.0.0/16 -p80,443 掃描100個常見端口的B類子網,每秒100,000個數據包 Masscan 10.11.0.0/16 --top-ports 100 -rate 100000 結果輸出 -oX filename:輸出到filename的XML。 -oG filename:輸出到filename在的grepable格式。 -oJ filename:輸出到filename在JSON格式。

3、socket探測端口

socket 探測端口發送的不是完整的三次握手包如下,

A:192.168.70.142

B:192.168.0.143 開放端口3306

A接收到B返回的syn ack數據包後,A把數據丢棄。

端口掃描有什麼用處(端口掃描方式有哪一些)4

探測不開放端口

A發送syn,B沒有開放33端口,所以返回RST數據包。

端口掃描有什麼用處(端口掃描方式有哪一些)5

def portscan(ip,port): try: s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.settimeout(0.2) status = s.connect_ex((ip,port)) if status == 0: temp_str = str(ip) "---" str(port) "---open" port_list.append(temp_str) else: pass except Exception as e: pass finally: s.close()

端口掃描有什麼用處(端口掃描方式有哪一些)6

探測10個ip花費了26.3s差不多一個2.6s。

4、telnet探測端口

telnet 探測端口采用完整的三次握手連接,使用命令 telnet ip port ,發包流程如下

A:192.168.70.142

B:192.168.0.143 開放端口3306

telnet 192.168.0.143 3306

過程如下:

使用TCP三次握手建立連接: SYN -> SYN ACK ACK

端口掃描有什麼用處(端口掃描方式有哪一些)7

探測不存在端口,發送SYN數據包,然後RST包丢棄。

端口掃描有什麼用處(端口掃描方式有哪一些)8

如果有返回值,則說明端口開放,否則則端口關閉。

def portscan(ip,port): try: t = telnetlib.Telnet(ip,port=port,timeout=0.2) if t: temp_str = str(ip) '---' str(port) port_list.append(temp_str) except Exception as e: print(e) pass

端口掃描有什麼用處(端口掃描方式有哪一些)9

探測10個ip花費了27.8s差不多一個2.7s。

5、nc探測端口

nc探測端口采用完整的三次握手連接,使用命令 nc -v -w 1 -z ip port,發包過程和telent 探測一樣。

探測開放端口的數據包

端口掃描有什麼用處(端口掃描方式有哪一些)10

探測未開放端口的數據包

端口掃描有什麼用處(端口掃描方式有哪一些)11

端口開放,返回值為0,可以依此作為判斷依據。

def portscan(ip,port): command = 'nc -v -w 1 -z {0} {1}'.format(ip,port) m = os.system(command) if m == 0: temp_str = str(ip) "---" str(port) port_list.append(temp_str) else: pass

端口掃描有什麼用處(端口掃描方式有哪一些)12

備注:比如你想探測某個指定的端口開放情況,推薦使用nc。

總結

nmap 作為掃描端口的神器,掃描出的結果比其他幾種方式要詳細。如果追求效率的話,建議采用socket。相比于nmap,socket會存在漏報情況,筆者在測試某主機時,nmap掃出了8888端口,但是socket沒有。

現在大家對于的幾種常見方式應該都有所了解了,希望大家閱讀完這篇文章能有所收獲。最後,如果想要了解更多安全知識可以關注筆者。

文本轉載自PHP中文網

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved