うまくいかなかった.
vs-stun, sync-prompt, dgram利用
udpTest.js
var stun = require('vs-stun'); var socket, server = { host: 'stun.l.google.com', port: 19302 } var callback = function callback ( error, value ) { if ( !error ) { socket = value; console.log(socket.stun); socket.close(); chat(); } else console.log('Something went wrong: ' + error); } stun.connect(server, callback); function chat(){ /* get destination info*/ var prompt = require('sync-prompt').prompt; var PORT = prompt('Destination UDP Port? '); var ADDRESS = prompt('Destination UDP Global IP Address? '); if(PORT===""||ADDRESS===""){ console.log("input valid info"); process.exit(1); } var dgram = require('dgram') , ifaces = require('os').networkInterfaces() , omitAddresses = [] , stdin = process.stdin , stdout = process.stdout; /* Object.keys(ifaces).forEach(function(type){ ifaces[type].forEach(function(iface){ if (iface.family.toLowerCase() == 'ipv4') { omitAddresses.push(iface.address); } }); }); */ sock = dgram.createSocket('udp4') sock.on('message', function(data, rinfo){ if (omitAddresses.indexOf(rinfo.address) === -1) { stdout.write(data.toString()); } }); sock.bind(PORT, '', function(){ stdout.write('please enter message...\n'); sock.setBroadcast(true); stdin.resume(); stdin.on('data', function(data){ sock.send(data, 0, data.length, PORT, ADDRESS, function(err){ if (err) throw err; }); }); }); }