监听 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]);
}
}
});
我想收听来自我的路由器的 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]);
}
}
});