記錄在b站學習的知識實驗環境利用tcp原理,通過編寫python指令碼,來檢測某個主機的埠開放情況,下面介紹兩種掃瞄,syn掃瞄和fin掃瞄
準備工作
**展示
from scapy.layers.inet import ip,tcp
from scapy.sendrecv import sr
# syn掃瞄
defsyn_scan
(target_ip,start_port,end_port)
: temp = sr(ip(dst=target_ip)
/tcp(dport=
(int
(start_port)
,int
(end_port)
),flags=
's')
,timeout=
3,verbose=
false
) result = temp[0]
.res
for i in
range
(len
(result)):
if result[i][1
].haslayer(tcp)
:# 判斷是不是tcp包
tcp_pack=result[i][1
].getlayer(tcp)
.fields # 因為包的第二個才是從被掃瞄的主機返回的資料 ,所以是 result[i][1]
if tcp_pack[
'flags']==
18:#這裡是 ack+syn=18
print
(target_ip+
" "+
str(tcp_pack[
'sport'])
+" open"
)# fin掃瞄,null掃瞄其實和fin掃瞄原理相同,所以把flags='n'即可實現null掃瞄
deffin_scan
(target_ip,start_port,end_port)
: temp = sr(ip(dst=target_ip)
/tcp(dport=
(int
(start_port)
,int
(end_port)
),flags=
'f')
,timeout=
3,verbose=
false
) result = temp[0]
.res
port_list=
[i for i in
range
(int
(start_port)
,int
(end_port)+1
)]cport_list=
for i in
range
(len
(result)):
if result[i][1
].haslayer(tcp)
: tcp_pack=result[i][1
].getlayer(tcp)
.fields
if tcp_pack[
'flags']==
20:# 這裡是 rst=20,若埠關閉,則會返回 rst/ack包
'sport'])
oport_list=
list
(set
(port_list)
.difference(cport_list)
)#運用求差集的方法,總的埠減去關閉的埠
for item in
sorted
(oport_list)
:print
(target_ip+
" "+
str(item)
+" open"
)if __name__ ==
'__main__'
:print
('select the method to scan: 1)syn scan 2)fin scan '
) selection =
input
('method:'
) target_ip =
input
('target_ip:'
) start_port =
input
('start_port:'
) end_port =
input
('end_port:'
)print
('please wait......')if
(selection==
'1')
: syn_scan(target_ip,start_port,end_port)
elif selection==
'2':
fin_scan(target_ip, start_port, end_port)
else
:print
('check your number of the method please!!!'
)
結果展示
注意的點
wireshark抓fin掃瞄的過程展示
Python指令碼 埠掃瞄器
乙個用python寫的簡單的埠掃瞄器,python環境為 3.7.0,windows系統 掃瞄給定主機是否開放了指定的埠tcp連線掃瞄是利用tcp的三次握手來確定主機的埠是否開放。確定主機埠開放之後,給埠傳送訊息,接收埠返回的訊息,然後判斷該埠執行的服務。使用時,h 引數可以提供主機的網域名稱或者i...
Linux shell編寫埠掃瞄指令碼
linux shell編寫埠掃瞄指令碼 需求 掃瞄特定主機 掃瞄特定主機的特定埠 掃瞄特定網段 掃瞄特定網段中哪些主機開放了特定的埠 原始碼如下 bin bash 該指令碼用於對特定目標主機進行常見埠掃瞄 載入埠字典 或者指定埠掃瞄,判斷目標主機開放來哪些埠 用telnet方式 部落格 https ...
簡單高效的埠掃瞄python指令碼
最近為了獲取虛擬機器埠開放情況,寫了乙個簡單指令碼來檢視。共享給大家。下面的 在python2種測試通過 說明 concurrent是python 3.2 引入的乙個庫,在python2中使用需要手動安裝一下 pip install futures from concurrent import fu...