python 使用Raw Socket進行乙太網路幀注入

來源:互聯網
上載者:User

標籤:python   乙太網路幀注入   raw-socket   tcpdump   

1. 幀注入

  對於乙太網路幀和Raw Socket的介紹可參考之前的一篇博文利用Raw Socket進行乙太網路幀嗅探。幀注入的特點:
  

  • 可以將原資料格式的包注入到網路中。
  • 在類比網路應答方面很強大。
  • 原始通訊端包結構具有不可延展性。

     隨機注入

    如果你可以隨機注入資料到網路上的話,你就可以向網路上發送任何資料。^_^

2. 代碼實驗

  進入python運行環境,需要加上root許可權。(sudo python)。
  

>>>
>>> import socket
>>> import struct
>>>
>>>
>>> rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
>>>
>>> rawSocket.bind((“eth0”,socket.htons(0x0800)))
>>> packet = struct.pack(“!6s6s2s”,’\xaa\xaa\xaa\xaa\xaa\xaa’,’\xbb\xbb\xbb\xbb\xbb\xbb’,’\x08\x00’)
>>>
>>> packet
‘\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\x08\x00’
>>>
>>> len(packet)
14
>>>
>>> rawSocket.send(packet + “hello, there.”)
27
>>>

 
  這裡依舊使用PF_PACKET協議族,綁定到eth0網路介面上,連接埠號碼0x0800。利用struct模組的pack()函數來封裝幀。乙太網路幀頭有14位元組,分別為6位元組目的mac地址、6位元組源mac地址和2位元組協議類型。”!6s6s2s”中!表示按網路序組包。我們用len()函數求一下packet的長度,正好為14位元組。然後加上我們想發送的內容將資料發送的網路中,返回的結果是發送資料的長度。
  使用tcpdump或者wireshark來查看一下我們發送的資料。我這裡採用tcpdump的方式,終端下輸入以下命令(我用的是Ubuntu Server,ssh串連。為了方便查看,過濾掉連接埠為22的資料。去除雜亂資料),然後重新發送一下資料:
  $ sudo tcpdump -i eth0 -vv -XX "not port 22 and not arp and not udp"

  從結果的第二個資料包看,我們的隨機的資料已經注入到網路中。
  

python 使用Raw Socket進行乙太網路幀注入

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.