85

I'd like to get remote machine/hostname through IP Address. I found lots of answer such as nslookup, host, resloveip, etc.. but I still can't get hostname from my target machine(cent OS, ubuntu etc...) It seems need to register to DNS server?

I have a machine named test and using IP 10.1.27.97

but I used the method above still can't not get "test"

Does anyone can help me to get the hostname form IP Address?

Rotareti
  • 49,483
  • 23
  • 112
  • 108
RoyHSIEH
  • 855
  • 1
  • 6
  • 8
  • What if the name is foundable in the local network, but not in any DNS? I have a `search` command in my `resolv.conf` and I know my name is in it. – Sandburg Aug 27 '18 at 07:15

5 Answers5

107

To find a hostname in your local network by IP address you can use nmblookup from the samba suite:

nmblookup -A <ip>

To find a hostname on the internet you could use the host program:

host <ip>

Or you can install nbtscan by running:

sudo apt-get install nbtscan

And use:

nbtscan <ip>

*Adapted from https://askubuntu.com/questions/205063/command-to-get-the-hostname-of-remote-server-using-ip-address/205067#205067

Update 2018-05-13

You can query a name server with nslookup. It works both ways!

nslookup <IP>
nslookup <hostname>
HarlemSquirrel
  • 8,966
  • 5
  • 34
  • 34
61

In order to use nslookup, host or gethostbyname() then the target's name will need to be registered with DNS or statically defined in the hosts file on the machine running your program. Yes, you could connect to the target with SSH or some other application and query it directly, but for a generic solution you'll need some sort of DNS entry for it.

Chris Ryding
  • 1,508
  • 11
  • 16
8

Another simple way I found for using in LAN is

ssh [username@ip] uname -n

If you need to login command line will be

sshpass -p "[password]" ssh [username@ip] uname -n
gianlucaparadise
  • 1,678
  • 20
  • 32
0

no need to know connected ip :

sh -c "IP=\$(curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'); nslookup \$IP | grep 'name =' | awk '{print \$NF}'"

This code is a shell command that does the following:

  • Uses the curl command to retrieve the public IP address of the machine on which it is executed from the website checkip.dyndns.org. The output of curl is piped into the sed command, which is used to extract just the IP address from the response.
  • The IP address is then stored in the IP variable.
  • The nslookup command is used to perform a reverse DNS lookup on the IP address. This will return the domain name associated with the IP address.
  • The output of nslookup is piped into the grep command, which is used to extract the line containing the string 'name ='.
  • Finally, the awk command is used to extract the last field in the line, which is the domain name associated with the IP address.
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Feb 10 '23 at 09:59
0

Don't use the host command. On some operating systems, you will set the name of your host with whatever you type after it, so typing host 23.23.23.23 will set your hostname to that.