Skip to content

Instantly share code, notes, and snippets.

@spacemeowx2
Created December 13, 2018 12:18
Show Gist options
  • Save spacemeowx2/3a599328f87558580b324b38f049d7da to your computer and use it in GitHub Desktop.
Save spacemeowx2/3a599328f87558580b324b38f049d7da to your computer and use it in GitHub Desktop.
slp_udpping.js
const dgram = require('dgram')
const crypto = require('crypto')
function udpPing (server, port = 11451, timeout = 1000) {
return new Promise((resolve, reject) => {
const socket = dgram.createSocket('udp4')
const myReject = (err) => {
socket.close()
reject(err)
}
const myResolve = (val) => {
socket.close()
resolve(val)
}
setTimeout(() => myReject(new Error('timeout')), timeout)
const sndMsg = Buffer.concat([Buffer.from([2]), crypto.randomBytes(4)])
const startTime = Date.now()
socket.on('error', (err) => reject(err))
socket.on('close', () => reject(new Error('socket closed')))
socket.on('message', (msg, rinfo) => {
if (rinfo.address != server || rinfo.port != port) {
myReject(new Error('address not match'))
return
}
if (msg.equals(sndMsg)) {
myResolve(Date.now() - startTime)
} else {
myReject(new Error('content not match'))
}
})
socket.send(sndMsg, port, server, err => err && myReject(err))
})
}
async function main() {
let ping = await udpPing('35.236.10.223')
console.log(ping)
}
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment