You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					65 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					65 lines
				
				1.3 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var mdns = require('./')()
							 | 
						||
| 
								 | 
							
								var path = require('path')
							 | 
						||
| 
								 | 
							
								var os = require('os')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var announcing = process.argv.indexOf('--announce') > -1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (process.argv.length < 3) {
							 | 
						||
| 
								 | 
							
								  console.error('Usage: %s <hostname>', path.basename(process.argv[1]))
							 | 
						||
| 
								 | 
							
								  process.exit(1)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								var hostname = process.argv[2]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (announcing) {
							 | 
						||
| 
								 | 
							
								  var ip = getIp()
							 | 
						||
| 
								 | 
							
								  mdns.on('query', function (query) {
							 | 
						||
| 
								 | 
							
								    query.questions.forEach(function (q) {
							 | 
						||
| 
								 | 
							
								      if (q.name === hostname) {
							 | 
						||
| 
								 | 
							
								        console.log('Responding %s -> %s', q.name, ip)
							 | 
						||
| 
								 | 
							
								        mdns.respond({
							 | 
						||
| 
								 | 
							
								          answers: [{
							 | 
						||
| 
								 | 
							
								            type: 'A',
							 | 
						||
| 
								 | 
							
								            name: q.name,
							 | 
						||
| 
								 | 
							
								            data: ip
							 | 
						||
| 
								 | 
							
								          }]
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								} else {
							 | 
						||
| 
								 | 
							
								  mdns.on('response', function (response) {
							 | 
						||
| 
								 | 
							
								    response.answers.forEach(function (answer) {
							 | 
						||
| 
								 | 
							
								      if (answer.name === hostname) {
							 | 
						||
| 
								 | 
							
								        console.log(answer.data)
							 | 
						||
| 
								 | 
							
								        process.exit()
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  mdns.query(hostname, 'A')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Give responses 3 seconds to respond
							 | 
						||
| 
								 | 
							
								  setTimeout(function () {
							 | 
						||
| 
								 | 
							
								    console.error('Hostname not found')
							 | 
						||
| 
								 | 
							
								    process.exit(1)
							 | 
						||
| 
								 | 
							
								  }, 3000)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function getIp () {
							 | 
						||
| 
								 | 
							
								  var networks = os.networkInterfaces()
							 | 
						||
| 
								 | 
							
								  var found = '127.0.0.1'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Object.keys(networks).forEach(function (k) {
							 | 
						||
| 
								 | 
							
								    var n = networks[k]
							 | 
						||
| 
								 | 
							
								    n.forEach(function (addr) {
							 | 
						||
| 
								 | 
							
								      if (addr.family === 'IPv4' && !addr.internal) {
							 | 
						||
| 
								 | 
							
								        found = addr.address
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return found
							 | 
						||
| 
								 | 
							
								}
							 |