Solved

Script nslookup results to output file

Posted on 2007-03-22
3
3,685 Views
Last Modified: 2012-06-21
I am trying to edit a vbscript to input a txt file list of ipaddresses to nslookup and output the computernames into a file. My code is almost there but still not working right. It inputs the ipaddresses but returns the same ipaddresses not the computer names. It also creates a new file for each ipaddress. I would like the results to append all to one file. Any help is appreciated. Here is my code:

Const ForReading = 1
Const ForAppending = 2


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile ("listofIPAddresses.txt", ForReading)


Do Until objTextFile.AtEndOfStream


   strIPAddress = objTextFile.Readline
   If strIPAddress <> "" Then


     If IsConnectible(strIPAddress, "", "") Then
       

       strComputerName = NSlookup(strIPAddress)
       If strComputerName = "" Then
         strComputerName = strIPAddress
       End If


       Set objLogFile = objFSO.CreateTextFile _
           (strComputerName & ".csv", ForWriting, True)
      


             objLogFile.Write strComputerName
      'objLogFile.Write nslookupvalue
       objLogFile.Close


     Else
       ' here you might want to report somewhere else that the script was
       ' not able to connect to the computer
       WScript.Echo "Could not connect to IP address " & strIPAddress
     End If


   End If
Loop


objTextFile.Close
wscript.echo "files are done"


Function IsConnectible(sHost, iPings, iTO)
   ' Returns True or False based on the output from ping.exe
   '
   ' Author: Alex Angelopoulos/Torgeir Bakken
   ' Works an "all" WSH versions
   ' sHost is a hostname or IP
   ' iPings is number of ping attempts
   ' iTO is timeout in milliseconds
   ' if values are set to "", then defaults below used


   Const OpenAsASCII      =  0
   Const FailIfNotExist   =  0
   Const ForReading       =  1
   Dim oShell, oFSO, sTempFile, fFile


   If iPings = "" Then iPings = 2
   If iTO = "" Then iTO = 750


   Set oShell = CreateObject("WScript.Shell")
   Set oFSO = CreateObject("Scripting.FileSystemObject")


   sTempFile = oFSO.GetSpecialFolder(2).ShortPath & "\" & oFSO.GetTempName


   oShell.Run "%comspec% /c ping.exe -n " & iPings & " -w " & iTO _
      & " " & sHost & ">" & sTempFile, 0 , True


   Set fFile = oFSO.OpenTextFile(sTempFile, ForReading, _
                                     FailIfNotExist, OpenAsASCII)


   sResults = fFile.ReadAll
   fFile.Close
   oFSO.DeleteFile(sTempFile)
   IsConnectible = CBool(InStr(sResults, "TTL="))


End Function



Function NSlookup(sHost)
   ' Both IP address and DNS name is allowed
   ' Function will return the opposite


   Set oRE = New RegExp
   oRE.Pattern = "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
   bInpIP = False
   If oRE.Test(sHost) Then
     bInpIP = True
   End If


   Set oShell = CreateObject("Wscript.Shell")
   Set oFS = CreateObject("Scripting.FileSystemObject")


   sTemp = oShell.ExpandEnvironmentStrings("%TEMP%")
   sTempFile = sTemp & "\" & oFS.GetTempName


   'Run NSLookup via Command Prompt
   'Dump results into a temp text file
   oShell.Run "%ComSpec% /c nslookup.exe " & sHost _
       & " >" & sTempFile, 0, True


   'Open the temp Text File and Read out the Data
   Set oTF = oFS.OpenTextFile(sTempFile)


   'Parse the text file
   Do While Not oTF.AtEndOfStream
     sLine = Trim(oTF.Readline)
     If LCase(Left(sLine, 5)) = "name:" Then
       sData = Trim(Mid(sLine, 6))
       If Not bInpIP Then
         'Next line will be IP address(es)
         'Line can be prefixed with "Address:" or "Addresses":
         aLine = Split(oTF.Readline, ":")
         sData = Trim(aLine(1))
       End If
       Exit Do
     End If
   Loop


   'Close it
   oTF.Close
   'Delete It
   oFS.DeleteFile sTempFile


   If Lcase(TypeName(sData)) = LCase("Empty") Then
     NSlookup = "" 
   Else
     NSlookup = sData
   End If
End Function
0
Comment
Question by:snsuser
  • 2
3 Comments
 
LVL 67

Accepted Solution

by:
sirbounty earned 250 total points
ID: 18777339
Here's the only things I found - other than this, your script seems to work..

Your constants are not correct, modify them like this:
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

The only other piece needed to make it an appendable file was this:

strOutput="C:\NS_Report.txt"
If objfso.FileExists(strOutput) Then
  Set objLogFile = objfso.OpenTextFile (strOutput, ForAppending)
Else
  Set objLogFile = objfso.CreateTextFile(strOutput, ForWriting, True)
End If
0
 

Author Comment

by:snsuser
ID: 18778824
I am just getting an empty NS_Report.txt output file. I dont think my function for nslookup is working either. Even with the original script I was only getting the ip address repeated again not the computer name?
I updated the script as commented but still having problems. The output file is blank.

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile ("listofIPAddresses.txt", ForReading)


Do Until objTextFile.AtEndOfStream


   strIPAddress = objTextFile.Readline
   If strIPAddress <> "" Then


     If IsConnectible(strIPAddress, "", "") Then
       

       strComputerName = NSlookup(strIPAddress)
       If strComputerName = "" Then
         strComputerName = strIPAddress
       End If


       'Set objLogFile = objFSO.CreateTextFile _
           '(strComputerName & ".csv", ForWriting, True)
      
      'Set objLogFile = objFSO.CreateTextFile _
           '(nslookupvalue & ".csv", ForWriting, True)

       'Set objFSO = CreateObject("Scripting.FileSystemObject")
       'Set objLogFile = objFSO.CreateTextFile(nslookupvalue & ".csv", ForWriting, True)



             'objLogFile.Write strComputerName
      'objLogFile.Write nslookupvalue
       'objLogFile.Close

      strOutput="C:\NS_Report.txt"
If objfso.FileExists(strOutput) Then
  Set objLogFile = objfso.OpenTextFile (strOutput, ForAppending)
Else
  Set objLogFile = objfso.CreateTextFile(strOutput, ForWriting, True)
End If

     Else
       ' here you might want to report somewhere else that the script was
       ' not able to connect to the computer
       WScript.Echo "Could not connect to IP address " & strIPAddress
     End If


   End If
Loop


objTextFile.Close
wscript.echo "files are done"


Function IsConnectible(sHost, iPings, iTO)
   ' Returns True or False based on the output from ping.exe
   '
   ' Author: Alex Angelopoulos/Torgeir Bakken
   ' Works an "all" WSH versions
   ' sHost is a hostname or IP
   ' iPings is number of ping attempts
   ' iTO is timeout in milliseconds
   ' if values are set to "", then defaults below used


   Const OpenAsASCII      =  0
   Const FailIfNotExist   =  0
   Const ForReading       =  1
   Dim oShell, oFSO, sTempFile, fFile


   If iPings = "" Then iPings = 2
   If iTO = "" Then iTO = 750


   Set oShell = CreateObject("WScript.Shell")
   Set oFSO = CreateObject("Scripting.FileSystemObject")


   sTempFile = oFSO.GetSpecialFolder(2).ShortPath & "\" & oFSO.GetTempName


   oShell.Run "%comspec% /c ping.exe -n " & iPings & " -w " & iTO _
      & " " & sHost & ">" & sTempFile, 0 , True


   Set fFile = oFSO.OpenTextFile(sTempFile, ForReading, _
                                     FailIfNotExist, OpenAsASCII)


   sResults = fFile.ReadAll
   fFile.Close
   oFSO.DeleteFile(sTempFile)
   IsConnectible = CBool(InStr(sResults, "TTL="))


End Function



Function NSlookup(sHost)
   ' Both IP address and DNS name is allowed
   ' Function will return the opposite


   Set oRE = New RegExp
   oRE.Pattern = "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
   bInpIP = False
   If oRE.Test(sHost) Then
     bInpIP = True
   End If


   Set oShell = CreateObject("Wscript.Shell")
   Set oFS = CreateObject("Scripting.FileSystemObject")


   sTemp = oShell.ExpandEnvironmentStrings("%TEMP%")
   sTempFile = sTemp & "\" & oFS.GetTempName


   'Run NSLookup via Command Prompt
   'Dump results into a temp text file
   oShell.Run "%ComSpec% /c nslookup.exe " & sHost _
       & " >" & sTempFile, 0, True


   'Open the temp Text File and Read out the Data
   Set oTF = oFS.OpenTextFile(sTempFile)


   'Parse the text file
   Do While Not oTF.AtEndOfStream
     sLine = Trim(oTF.Readline)
     If LCase(Left(sLine, 5)) = "name:" Then
       sData = Trim(Mid(sLine, 6))
       If Not bInpIP Then
         'Next line will be IP address(es)
         'Line can be prefixed with "Address:" or "Addresses":
         aLine = Split(oTF.Readline, ":")
         sData = Trim(aLine(1))
       End If
       Exit Do
     End If
   Loop


   'Close it
   oTF.Close
   'Delete It
   oFS.DeleteFile sTempFile


   If Lcase(TypeName(sData)) = LCase("Empty") Then
     NSlookup = "" 
   Else
     NSlookup = sData
   End If


strOutput="C:\NS_Report.txt"
If objfso.FileExists(strOutput) Then
  Set objLogFile = objfso.OpenTextFile (strOutput, ForAppending)
Else
  Set objLogFile = objfso.CreateTextFile(strOutput, ForWriting, True)
End If

End Function
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18779261
Looks like you've got this:
      strOutput="C:\NS_Report.txt"
If objfso.FileExists(strOutput) Then
  Set objLogFile = objfso.OpenTextFile (strOutput, ForAppending)
Else
  Set objLogFile = objfso.CreateTextFile(strOutput, ForWriting, True)
End If

in both the main code routine, as well as in the last function?

I just tried this again on my work PC and I got

server1.domain.com
????????? 'second one failed, for whatever reason...

I'm not sure why - but the first one did work.
I'm no good with regex's - so I wouldn't be of much help if that's where the problem is, but the code does seem to process correctly (well, except for the 2nd system I entered...need to check that out...)
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article is the result of a quest to better understand Task Scheduler 2.0 and all the newer objects available in vbscript in this version over  the limited options we had scripting in Task Scheduler 1.0.  As I started my journey of knowledge I f…
Not long ago I saw a question in the VB Script forum that I thought would not take much time. You can read that question (Question ID  (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_28455246.html)28455246) Here (http…
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question