The following scripts attempts to find the physical adapters in a server that are enabled and arent the HP Teaming Adapter (we are a HP house, so tough if your not!! :)
Once it has found the adapters it builds the interface name dynamically using the GUID as this is supported by TCPDUMP and then listens for a CDP packet (This is a cisco function that could have been disabled by your network administrators)
After the packet has been recieved it does some pretty messy string manipulation, because I couldnt be bothered to pull my hair out with RegEx. After I have pulled out the information I want I check to see if the Adapter description has the switch port information and update the description if it doesn't.
The script can be ammended to not update the NIC description and just output the details to screen by commenting and uncommenting a few lines.
** Update 21-04-11 - Added code to swap to cscript rather than wscript. **
' ******************************************************************
' NameAdapters.vbs
' ******************************************************************
' Determine Pysical NIC Adapters for Team
' David Wallis - 15/04/11
' ******************************************************************
' ******************************************************************
' Check Script is being run with CSCRIPT rather than WSCRIPT due to using stdout
' ******************************************************************
If UCase(Right(Wscript.FullName, 11)) = "WSCRIPT.EXE" Then
strPath = Wscript.ScriptFullName
Wscript.Echo "This script must be run under CScript." & vbCrLf & vbCrLf & "Re-Starting Under CScript"
strCommand = "%comspec% /K cscript //NOLOGO " & Chr(34) & strPath & chr(34)
Set objShell = CreateObject("Wscript.Shell")
objShell.Run(strCommand)
Wscript.Quit
End If
strComputer = "."
Const NETWORK_CONNECTIONS = &H31&
Set objShell = CreateObject("Wscript.Shell")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.Namespace(NETWORK_CONNECTIONS)
' NetEnabled is -1 when Enabled and 0 When the NIC is disabled
Set oAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapter where (NetEnabled = -1)")
' Enumerate the results (list of NICS). "
For Each oAdapter In oAdapters
If oAdapter.ProductName = "HP Network Teaming Virtual Miniport Driver" Then
'Teamed Adapter
Else
'Physical Nic - Execute TCPDUMP
strCommand = "tcpdump -nn -v -s 1500 -i \Device\" & oAdapter.GUID & " -c 1 ether[20:2] == 0x2000"
Wscript.echo "Executing TCP Dump for Adapter " & chr(34) & oAdapter.NetConnectionID & chr(34) & " GUID:" & oAdapter.GUID & VbCrLF
Set objExec = objShell.Exec(strCommand)
count = 0
Do Until objExec.Status
count = count +1
'Timeout to Deal with Non CDP Enabled Devices
If count = 1200 then
wscript.echo "TCPDUMP Execution Timeout Exceeded, Script Quiting"
wscript.quit
End If
Wscript.Sleep 250
Loop
' Loop through the output of TCPDUMP stored in stdout and retrieve required fields
' Namely switch name, IP and Port
While Not objExec.StdOut.AtEndOfStream
strLine = objExec.StdOut.ReadLine
If Instr(UCASE(strLine),"DEVICE-ID") > 0 Then strDeviceID = Mid(strLine,(Instr(strLine,chr(39))+1),(Len(StrLine) - (Instr(strLine,chr(39))+1)))
If Instr(UCASE(strLine),"ADDRESS ") > 0 Then strDeviceIP = Right(strLine,(Len(strLine) - (Instrrev(strLine,")")+1)))
If Instr(UCASE(strLine),"PORT-ID") > 0 Then strPort = Mid(strLine,(Instr(strLine,chr(39))+1),(Len(StrLine) - (Instr(strLine,chr(39))+1)))
Wend
' Rename Nic to Contain Switch Name and Port
' NetConnectionID Is readonly on some versions of Windows.
strName = oAdapter.NetConnectionID
Set colItems = objFolder.Items
For Each objItem in colItems
If objItem.Name = strName Then
'Build Description to Append to Port Name
' Windows doesn't like the / Character, so Replace it with a -
strDescription = " (" & strDeviceID & " " & strDeviceIP & " " & Replace(strPort,"/","-") & ")"
' If the port doesn't contain the switchport details then add them.
If Instr(objItem.Name,strDescription) = 0 then
wscript.echo "Ammending Adapter Description." & vbCrLf
objItem.Name = strName & strDescription
Else
wscript.echo "Skipping Adapter Description Ammendment."
End If
End If
Next ' objItem
'wscript.echo "Details for Adapter " & chr(34) & oAdapter.NetConnectionID & Chr(34)
'wscript.echo "MAC Addr: " & oAdapter.MACAddress & " Switch: " & strDeviceID & " " & strDeviceIP & " Port: " & strPort & vbCrLf
End If
Next 'oAdapter
After a long time, I read a very beautiful and very important article that I enjoyed reading. I have found that this article has many important points, I sincerely thank the admin of this website for sharing it. Best network ports service provider.
ReplyDelete