scapy構造列印ARP資料包

D0y發表於2019-06-18

ARP格式:

用於乙太網的ARP請求/應答分組格式

各欄位含義:

  幀型別:表示資料部分用什麼協議封裝(0800表示IP,0806表示ARP,8035表示RARP)。

  硬體型別:表示硬體地址的型別(其中,值為1表示乙太網地址,其他還可能表示令牌環地址)。

  硬體地址長度:指出該報文中硬體地址的長度(ARP報文中,它的值為6)。

  協議地址長度:指出該報文中協議地址的長度(ARP報文中,它的值為4)。

  op:操作欄位,共有4種型別(1:ARP請求,2:ARP應答,3:RARP請求,4:RARP應答)。

利用scay傳送接受ARP包:

  程式碼:

#coding:utf-8
from scapy.all import Ether
from scapy.all import ARP
from scapy.all import srp
arp = Ether(#構造乙太網頭
    src='64:6E:69:03:63:32',#本機MAC
    dst='FF:FF:FF:FF:FF:FF'#廣播傳送
)/ARP(
    op=1,#傳送arp請求
    hwsrc='64:6E:69:03:63:32',#傳送端乙太網地址
    psrc='10.50.253.232',#傳送端ip
    hwdst='00:00:00:00:00:00',#目的乙太網地址
    pdst='10.50.0.1'#目的ip地址
)

res = srp(arp,timeout=5)

string = """
--------result--------
hwtype :%s
ptype  :%s
hwlen  :%s
plen   :%s
op     :%s
hwsrc  :%s
psrc   :%s
hwdst  :%s
pdst   :%s
""" %(res[0].res[0][1].hwtype,res[0].res[0][1].ptype,res[0].res[0][1].hwlen,
    res[0].res[0][1].plen,res[0].res[0][1].op,res[0].res[0][1].hwsrc,
    res[0].res[0][1].psrc,res[0].res[0][1].hwdst,res[0].res[0][1].pdst)

print string

 

   返回的結果是元組(程式碼中的res),res[0]表示收到的資料包,res[1]表示沒有收到應答的資料包

  結果截圖:

 

 

  

相關文章