2016-04-21 88 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桥)......它仍在开发中,但我正在写这本书有一点重要 - 如果我设法做到了这一点,它不能那么难;-)

好运!