python編寫網路抓包分析指令碼

來源:互聯網
上載者:User

標籤:

python編寫網路抓包分析指令碼

 

寫網路抓包分析指令碼,一個稱手的sniffer工具是必不可少的,我習慣用Ethereal,簡單,易用,基於winpcap的一個開源的軟體

  • Ethereal內建許多協議的 decoder,但是它的架構並不靈活,如果你要加入一個自己定義的的解碼器,得去修改Ethereal的代碼,再重新編譯,相當的煩瑣

  • 對於一般的明文協議,沒有什麼問題,但是對於加密協議,比如網路遊戲,用戶端程式一般會在剛串連上的時候,發送一個隨機密鑰,而後的報文都會用這個密鑰進 行加密,諸如此類.要想破解,得要有一個可程式化的抓包器.libpcap是一個不錯的選擇,但是對於抓包這樣需要反覆進行”實驗->修改”這個過程 的操作,c 語言顯然不是明智的選擇.

Python提供了幾個libpcap bind,http://monkey.org/~dugsong/pypcap/這裡有一個最簡單的。在windows平台上,你需要先安裝winpcap,如果你已經安裝了Ethereal,可以跳過這個步驟.非常好用

  1. import pcap ,struct
  2. pack=pcap.pcap()
  3. pack.setfilter(‘udp port 8000‘)
  4. print ‘start capture....‘
  5. for recv_time,recv_data in pack:
  6. data=recv_data[42:]
  7. if isqq(data):
  8. packhead,ver,id,sequence = struct.unpack(‘>BHHH‘, data[0:7])

簡單說明一下

pcap還支援一些回呼函數的用法,效率比較高,不過抓包不是為了效率,把事情做正確就行

    • 調用pack.setfilter填寫filter字串,libpcap/WinPcap的filter language採用的tcpdump相同的格式,可以去看它的 man page,Ethereal的協助裡面有一個簡單的說明
    • data=recv_data[42:]這樣做的原因是,recv_data 抓到的都是raw packet, tcp/ip是分了5層,一個udp包,會帶有 14Bytes的 Ethenet_II Frame的頭,然後是20個位元組的ip包頭,而udp包頭有8個位元組,所以位移量42之後的才是udp的實際內容

      tcp包的包頭大小為20Bytes,所以其實際內容在位移量54之後

    • 報文的解析,可以用python內建的struct,很容易使用,當然可以安裝 http://monkey.org/~dugsong/dpkt/ 這個包,已經幫你解析基本的報文資訊

python編寫網路抓包分析指令碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.