监听 ARP 广播

Listening ARP broadcasts

我想收听来自我的路由器的 ARP 广播。是否可以用 node.js 以某种方式做到这一点。我找到了一个 arpjs 库,但它的依赖关系没有维护,所以我无法用最新的节点安装它。有没有办法用普通节点或不同的库来做到这一点?

我找到了 cap module。它支持 Windows 和 Winpcap,所以我可以用我的电脑测试它。在 Linux 上,它需要 libpcap 并且您需要 运行 它作为 root。一位朋友修改了示例代码以捕获 ARP 广播。它们比我预期的更频繁,而且不仅仅来自路由器,所以过滤我需要的数据包会更难。

var Cap = require('cap').Cap,  
    decoders = require('cap').decoders,  
    PROTOCOL = decoders.PROTOCOL;  

var c = new Cap(),    
    device = Cap.findDevice('192.168.0.10'),  
    //Ez fontos, ez parameterezi a libpcap/winpcap filtereit.  
    filter = 'arp',    
    bufSize = 10 * 1024 * 1024,    
    buffer = new Buffer(65535);    

var linkType = c.open(device, filter, bufSize, buffer);    

c.setMinBytes && c.setMinBytes(0);    

c.on('packet', function(nbytes, trunc) {    
  console.log('packet: length ' + nbytes + ' bytes, truncated? '    
              + (trunc ? 'yes' : 'no'));    

  // raw packet data === buffer.slice(0, nbytes)    

  if (linkType === 'ETHERNET') {    
    var ret = decoders.Ethernet(buffer);    

    //Ez is fontos, kulonben nem a megfelelore matchelsz.  
    if (ret.info.type === PROTOCOL.ETHERNET.ARP) {    
      console.log('Decoding ARP ...');    
    } else {  
      console.log('Unsupported Ethertype: ' + PROTOCOL.ETHERNET[ret.info.type]);    
    }  
  }    
});