1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-16 16:23:25 +00:00
Files
MeshAgent/Debug/dgramtest.js
2017-10-12 14:28:03 -07:00

89 lines
2.9 KiB
JavaScript

var dgram = require('dgram');
var os = require('os');
var interfaces = os.networkInterfaces();
var broadcastSockets = {};
var multicastSockets = {};
var httpHeaders = require('http-headers');
for (var adapter in interfaces)
{
if (interfaces.hasOwnProperty(adapter))
{
for (var i = 0 ; i < interfaces[adapter].length; ++i)
{
var addr = interfaces[adapter][i];
multicastSockets[i] = dgram.createSocket({ type: (addr.family == "IPv4" ? "udp4" : "udp6") });
//multicastSockets[i].bind({ address: addr.address, port:1900, exclusive:false});
multicastSockets[i].bind({ address: addr.address, exclusive: false });
if(addr.family == "IPv4")
{
//multicastSockets[i].addMembership("239.255.255.250");
//multicastSockets[i].setMulticastLoopback(true);
multicastSockets[i].once('message', OnMulticastMessage);
multicastSockets[i].send("M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nST: upnp:rootdevice\r\nMAN: \"ssdp:discover\"\r\nMX: 4\r\nContent-Length: 0\r\n\r\n", 1900, "239.255.255.250");
}
}
}
}
function OnMulticastMessage(msg, rinfo)
{
console.log("Received " + rinfo.size + " bytes from " + rinfo.address + ":" + rinfo.port);
var packet = httpHeaders(msg);
if (packet.hasOwnProperty('statusCode'))
{
console.log("Status (" + packet.statusCode + ") " + packet.statusMessage);
}
else
{
console.log(packet.method + " " + packet.url);
}
for (var header in packet.headers) {
console.log(" " + header + ":" + packet.headers[header]);
}
}
function SendWakeOnLan()
{
var magic = new Buffer(102);
for (var x = 0; x < 6; ++x)
{
magic[x] = 0xFF;
}
for (var x = 1; x <= 16; ++x) {
magic[(x * 6)] = 0xB8;
magic[(x * 6) + 1] = 0xAE;
magic[(x * 6) + 2] = 0xED;
magic[(x * 6) + 3] = 0x74;
magic[(x * 6) + 4] = 0xAB;
magic[(x * 6) + 5] = 0xC3;
}
for (var adapter in interfaces) {
if (interfaces.hasOwnProperty(adapter)) {
console.log(adapter + " => ");
for (var i = 0 ; i < interfaces[adapter].length; ++i) {
var addr = interfaces[adapter][i];
console.log(" " + addr.family + " => " + addr.address + " [" + addr.mac + "]");
if (addr.hasOwnProperty('netmask')) { console.log(" Netmask = " + addr.netmask); }
broadcastSockets[i] = dgram.createSocket({ type: (addr.family == "IPv4" ? "udp4" : "udp6") });
broadcastSockets[i].bind({ address: addr.address });
broadcastSockets[i].setBroadcast(true);
if (addr.family == "IPv4") {
broadcastSockets[i].send(magic, 7, "255.255.255.255");
}
}
}
}
}