Skip to content

Instantly share code, notes, and snippets.

@chimerast
Created September 21, 2020 14:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chimerast/792be64b58a778692287c181e1f3ad7b to your computer and use it in GitHub Desktop.
Save chimerast/792be64b58a778692287c181e1f3ad7b to your computer and use it in GitHub Desktop.
WiFiのMACアドレスを利用したRADIUS認証
import dgram from 'dgram';
import radius from 'radius';
const server = dgram.createSocket('udp4');
const RADIUS_SECRET = 'HOGEHOGE'; // RADIUSの共有シークレット
function auth(mac: string): boolean {
return mac === '00:00:00:00:00:00'; // 認証したいMACアドレス
}
server.on('message', (msg, rinfo) => {
const packet = radius.decode({
packet: msg,
secret: RADIUS_SECRET
});
if (packet.code !== 'Access-Request') {
console.error(`unknown packet type: ${packet.code}`);
return;
}
const username = packet.attributes['User-Name'];
const code = auth(username) ? 'Access-Accept' : 'Access-Reject';
console.info(`${code}: ${username}`);
const response = radius.encode_response({
packet: packet,
code: code,
secret: RADIUS_SECRET
});
server.send(response, 0, response.length, rinfo.port, rinfo.address, (error, bytes) => {
if (error) {
console.error(`error sending response to ${rinfo}`)
}
});
});
server.on('listening', () => {
const { address, port } = server.address();
console.info(`radius server listening ${address}:${port}`);
});
server.bind(1812);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment