2016-04-21 86 views

回答

0

原始套接字也很容易在https://docs.python.org/2/library/socket.htmlhttp://bt3gl.github.io/black-hat-python-building-a-udp-scanner.html)和組件http://sock-raw.org/,必須適應此代碼到x64組件,請參閱本64 bit version of socketcall system call Linux

分組嗅探在蟒蛇(界面必須設置爲promiscous模式):

import socket 
import os 

# host to listen 
HOST = '192.168.1.114' 

def sniffing(host, win, socket_prot): 
    while 1: 
     sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_prot) 
     sniffer.bind((host, 0)) 

     # include the IP headers in the captured packets 
     sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) 

     if win == 1: 
      sniffer.ioctl(socket.SIO_RCVALL, socket_RCVALL_ON) 

     # read in a single packet 
     print sniffer.recvfrom(65565) 

def main(host): 
    if os.name == 'nt': 
     sniffing(host, 1, socket.IPPROTO_IP) 
    else: 
     sniffing(host, 0, socket.IPPROTO_ICMP) 

if __name__ == '__main__': 
    main(HOST) 

複製自http://bt3gl.github.io/black-hat-python-building-a-udp-scanner.html

0

根據我的經驗(主要是Ruby和C),原始套接字在大多數語言中都很容易使用。

你可能會考慮的問題是:

  1. ,你會用什麼來輪詢套接字數據?

    select僅限於1024個插槽,如果你沒有訪問kqueue(BSD)或epoll(Linux)上,你會從連接限制(你可能會或可能不會在意)受到影響。

  2. 你的插座提供什麼服務?

    有些語言可以輕鬆地進行字符串操作,可以直接提供正則表達式和其他工具。有一個GC可能是一個性能問題,但它確實可以更容易編寫大量的東西。

    原始套接字只是一個圖層,我會考慮方程中的其他圖層。

至於Ruby工具,很多使用EM(Event Machine),我不太喜歡它。擁有這個強大的開發者社區應該對寶石產生積極的影響,所以這可能是一個很好的選擇。

我也注意到Faye和Rails(ActionCable)選擇了一個看起來很有前途的不同庫,nio4r。擁有這些強大的社區支持nio4r將會改善圖書館(建立在libev之上)。

我開始爲我自己的項目編寫一個庫(最初是在Ruby中,但後來在C中使用了一個Ruby橋)......它仍在開發中,但我正在寫這本書有一點重要 - 如果我設法做到了這一點,它不能那麼難;-)

好運!