前兩篇介紹了利用python撰寫一些腳本實作二層主機的發現,這一篇介紹一下三層主機的發現,
一般來說,三層主機的發現主要是通過ICMP協議來實作的,其中ICMP協議中的ping命令可以探測對面主機是否存活,有點也很顯而易見了,就是相比二層發現,三層主機發現可以實作跨網段探測掃描,但是,ping命令的探測是不準確的,因為ping命令是可以被防火墻直接過濾掉,
如果ping命令可達,我們不僅可以基本判斷對方主機在線,也可以通過ping命令中的回顯請求TTL值來推斷對方的主機和我們機器之間的路由距離,如果計算機沒有被進行過修改TTL值的設定的話,通過TTL值還可以推測對方主機的作業系統,
一般來說,windows系統的TTL初始值為128,Linux系統的TTL初始值為64,ping命令每經過一個路由設備,TTL值就會減少1,通過回傳的TTL值我們基本就能判斷對方主機的作業系統了,同樣的,由于TTL初始值也是可以被修改的,所以通過TTL來判斷對方的作業系統也不是很可靠,
簡單說一下禁ping的方法,windows機器就不多贅述了,很簡單,進入防火墻ICMPv4相關的設定即可,在Linux防火墻中,有兩條相關設定,允許機器被ping:iptables -A INPUT -p icmp -j ACCEPT ,禁止機器被ping:iptables -A INPUT -p icmp -j DROP
最后簡單再提一點,在linux中出了ping之外,還有一個增強型的ping————fping,fping命令集成了很多ping命令沒有的功能,其中fping在探測母端主機時,如果目標主機可達,那么它在接收到一個應答之后,就立刻停止發送請求了,如果目標主機暫時不可達,那fping嘗試連接4次,最后斷開,fping的最大優點就是可以掃描一個指定的網段,例如:fping -g | 192.168.1.0/24,加上-g引數即可,
最后附上python掃描三層的腳本,利用原理就是祥目標機器發ICMP報文,
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv) != 2:
print "Usage - ./pinger.py [filename]"
print "Example - ./pringer.py iplist.txt"
print "Example will perform an ICMP ping scan of the IP addresses listed in iplist.txt"
sys.exit()
filename = str(sys.argv[1])
file = open(filename,'r')
for addr in file:
ans = sr1(IP(dst=addr.strip())/ICMP(),timeout=1,verbose=0)
if ans == None:
pass
else:
print addr.strip()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/17480.html
標籤:其他
上一篇:處理日志程式
下一篇:fastjson 反彈shell
