a opensource, asynchronized, napi-based, business friendly tuntap device driver addon for nodejs.
npm install @xiaobaidadada/node-tuntap2-wintun
const {Tun, Tap} = require('@xiaobaidadada/node-tuntap2-wintun');
try {
const tun = new Tun();
tun.mtu = 1400;
tun.ipv4 = '10.0.0.100/24';
tun.ipv6 = 'abcd:1:2:3::/64';
tun.on('data', (buf) => {
console.log('received:', buf);
})
tun.isUp = true;
console.log(`created tun: ${tun.name}, ip: ${tun.ipv4}, ${tun.ipv6}, mtu: ${tun.mtu}`);
tun.release();
}
catch(e) {
console.log('error: ', e);
process.exit(0);
}
// widnwos
const {Wintun} = require("@xiaobaidadada/node-tuntap2-wintun")
const p2 = Wintun.get_wintun_dll_path();
Wintun.wintunSetPath(p2);
Wintun.wintunInit();
Wintun.wintunSetIpv4("tuntap2","10.6.7.7",24);
Wintun.wintunUpOn((buf)=>{
// 解析 IP 头部
const version = buf[0] >> 4;
const headerLength = (buf[0] & 0x0f) * 4;
const protocol = buf[9];
if (version !== 4) {
console.log('不是 IPv4');
return;
}
const sourceIP = buf.slice(12, 16).join('.');
const destIP = buf.slice(16, 20).join('.');
console.log(`Source IP: ${sourceIP}`);
console.log(`Destination IP: ${destIP}`);
// console.log("数据:"+buf);
});
// Wintun.wintunSend(sessionHandle,buffer);
Note: 目前仅支持linux和windows ;本项目使用了预构建,建议使用Node18,不需要编译而是从github下载编译好的文件,如果你电脑上的网络安装的时候无法访问github则会退化成编译。在windows上编译可能遇到的问题可以参考这个链接https://blog.csdn.net/jjocwc/article/details/134152602
Note: Reading properties requires your interface in up
status.
Note: For a Tun
device, mac
property is readonly.
Node: Please make sure the first 8bits is 00
for setting the mac address of a Tap device.
The tuntap object supports Node.js Duplex
interface. However, almost all streams api methods is a wrapper of fs.ReadStream or fs.WriteStream. The writing and events are based on them.
The writing and reading of tuntap is based on nodejs fs
and readingStream
. This means these methods is running on libuv threads pool. Please set the threads pool size properly for your application.