1

I already have a small script in perl to do reverse lookup, but it is not portable unless the other machine also has perl installed. I want a script that can run on colleagues machines seamlessly and also can be converted into a custom command (by updating PATH & PATHEXT environment variables). The script file must be portable and available to non admin users.

Batch script seems to fit this purpose, but I cannot figure out how to call the gethostbyaddr API. I suppose VBScript is also an option and open to that.

gethostbyaddr API

Benny
  • 639
  • 3
  • 11
  • 25
  • 1
    You cant invoke the API from VBScript alone, if you want a batch file what about calling nslookup – Alex K. Jun 12 '11 at 10:55
  • nslookup isn't quite useful when it comes to NETBIOS reverse lookup. In a huge LAN environment of thousands of clients, we want a NETBIOS reverse lookup. `NBTSTAT -A` is useful but I am not sure whether both results are similar. Perhaps it is also internally using the gethostbyaddr API (or perhaps it is the other way around). Running a perl script for reverse lookup always gives the best results, the NBTSTAT output is too cluttered and doesn't alternate to reverse DNS if NETBIOS lookup fails. – Benny Jun 12 '11 at 11:34

1 Answers1

0

Here's two batch scripts. Hopefully at least one can help.

@ECHO OFF
::Lookup.bat
::http://www.computing.net/answers/programming/ip-by-hostname/25313.html
::Takes input file of hostnames and creates csv file with hostnames and IP addresses.
::Gets IP's using nslookup
:: Output in file hostnames.csv in current folder

if "%1"=="" goto :Syntax

SET SCRIPTPATH=%~p0
CD %SCRIPTPATH%

del hostnames.csv

for /f %%e in (%1) do call :LOOKUP %%e
echo Done!!!
goto :EOF

:LOOKUP
SET HOST1=%1
FOR /F "skip=4 tokens=2 delims=:" %%A IN ('2^>NUL nslookup %1') DO ( ECHO %1,%%A>>%SCRIPTPATH%hostnames.csv )
GOTO :EOF

:Syntax
echo.
echo Syntax:
echo.
echo %0 ^<FileName^>
echo.
echo   where ^<FileName^> is a file containing a list of hostnames.
echo.
echo   The batch file will return the results to file hostnames.csv in current folder
goto :EOF

@echo off
::gethostname.bat
::Takes input file of IP addresses and creates csv file with IP address and hostnames.
::Gets hostnames using netBIOS, which is usually accurate. If no info avail from
::netBIOS, then use nslookup. Plenty of debug statements in screen output. :)
:: Output in file C:\TEMP\ip-resolved.csv

if "%1"=="" goto :Syntax

SET SCRIPTPATH=%~p0
CD %SCRIPTPATH%

echo ip,hostname,power>C:\TEMP\ip-resolved.csv
for /f %%e in (%1) do call :PING-NBT %%e
echo Done!!!
goto :EOF

:PING-NBT
set ipaddress=%1
set host1=
echo.
echo ***Pinging %ipaddress%
SET ON=0
PING -n 1 %1 | find /i "Reply from" >nul && SET ON=1
echo Just parsed ping reply... host is %ON%
REM Next line skips netBIOS check if host is offline
IF "%ON%"=="0" GOTO :LOOKUP %ipaddress% %ON%
echo Proceeding to nbtstat with host %on%

REM The next lines check netBIOS name.
echo nbt1-start
for /f %%i in ('nbtstat -a %1^|find "<20>"') do @set host1=%%i
echo nbt=%host1% power=%ON%
REM If there isn't a NetBIOS name, then skips to nslookup section.
REM echo %2
if "%host1%"=="" goto :LOOKUP %1 %ON%
ECHO %ipaddress%,%host1%,%ON% >> C:\TEMP\ip-resolved.csv
echo nbt2-end
goto :EOF

:LOOKUP
echo nslookup1-start
for /f "tokens=2" %%i in ('nslookup %1^|find "Name:"') do @set host1=%%i
echo nslookup=%host1% power=%2
REM Next line=if host var 
rem if not "%host1%"=="%1" goto :EOF
ECHO %ipaddress%,%host1%,%2 >>C:\TEMP\ip-resolved.csv
set host1=
echo nslookup2-end
goto :EOF

:Syntax
echo.
echo Syntax:
echo.
echo %0 ^<FileName^>
echo.
echo   where ^<FileName^> is a file containing a list of IP addresses to
echo         which we need the hostname.
echo.
echo   The batch file will return the results via a file
echo   C:\TEMP\ip-resolved.csv
goto :EOF
Lizz
  • 1,442
  • 5
  • 25
  • 51