信息蒐集-三層發現 Scapy

信息蒐集-三層發現 Scapy

點擊右上角【關注】發哥微課堂頭條號,get更多相關技能~


0x00:簡介

之前的二層發現利用 arp 協議記錄了 scapy 的使用方法,主要通過 ARP() 函數進行的發現。在三層中 scapy 也可以用來發現目標,利用的協議也是三層的主要協議 ip 和 icmp,方法類似。

0x01:scapy 三層發現

scapy 在三層發現目標主要是 IP() 函數和 ICMP() 函數,首先需要調用一下 IP 函數賦給一個變量,其次調用 ICMP 函數賦給一個變量,將兩個函數的請求頭合併就是一個 ping 包,如下圖:

信息蒐集-三層發現 Scapy


合成一個包的方式是小括號括起來通過 / 就可以。這樣就有了一個完整的 ping 包,通過 display 可查看,如下:

信息蒐集-三層發現 Scapy


有了 ping 包後,需要設置一下 ip 裡面的 dst 字段,也就是要發現目標的 ip 地址,這裡可以通過 ping[IP].dst="10.136.178.15" 來設置,設置後可通過 display 再次查看是否成功,如下:

信息蒐集-三層發現 Scapy


這時就可以發送 ping 包了,函數是 sr1,這裡是 sr1(ping), 示例如下:

信息蒐集-三層發現 Scapy


這時就發送完成了,結果賦給了變量 answer,詳細信息可以通過 answer.display 查看,如下:

信息蒐集-三層發現 Scapy


以上操作步驟也可以寫成一行命令,sr1(IP(dst="10.136.178.15")/ICMP()),結果和上面步驟一樣,如下圖:

信息蒐集-三層發現 Scapy


如果碰到沒有在線的目標,scapy 會等待,直到目標上線,所以如果批量去發現目標碰到一個目標不在線時,後面的就不會繼續去進行發現,如下圖:

信息蒐集-三層發現 Scapy


這時,可以通過 sr1 的第二個參數 timeout 來設置超時時間,默認單位是毫秒,如下圖:

信息蒐集-三層發現 Scapy


提示已經發了一個包,應答兩個包,獲取了 0 個丟失了 1 個。scapy 的三層發現也是不能批量掃描,需要結合 python 編寫腳本來實現,示例如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv)!=2:
print "參數錯誤,示例:./scapy-icmp.py 1.1.1.1"

sys.exit()
address=str(sys.argv[1])
prefix=address.split('.')[0]+'.'+address.split('.')[1]+'.'+address.split('.')[2]+'.'
for addr in range(1,254):
a=sr1(IP(dst=prefix+str(addr))/ICMP(),timeout=0.1,verbose=0)
if a == None:
pass
else:
print prefix+str(addr)

運行結果如下:

信息蒐集-三層發現 Scapy


協議的話就是 ICMP 了,因為腳本中使用 icmp 函數發的包,wireshark 抓包如下:

信息蒐集-三層發現 Scapy


如果已經有了要掃描的目標列表,也可以使用 python 寫一個腳本來實現讀取文件內容進行目標發現,示例如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv)!=2:
print "參數錯誤,示例:./scapy-icmp-txtList.py filename"
sys.exit()

filename=str(sys.argv[1])
file=open(filename,'r')
for addr in file:
a=sr1(IP(dst=addr.strip())/ICMP(),timeout=0.1,verbose=0)
if a==None:
pass
else:
print addr.strip()

0x02:總結

scapy 可以利用 arp 函數來進行二層的目標發現,也可以使用 icmp 函數來實現三層目標發現。不支持批量掃描,但因 scapy 本就是 python 的一個網絡分析包的庫,所以可用 python 來用腳本實現批量掃描。


分享到:


相關文章: