IP-Adresse: Unterschied zwischen den Versionen
Thomas (Diskussion | Beiträge) K (→Windows) |
Thomas (Diskussion | Beiträge) |
||
Zeile 31: | Zeile 31: | ||
== Windows == | == Windows == | ||
Unter Windows ist die Sache nicht ganz so einfach, da so schöne Tools wie ''sed'' dort im Allgemeinen nicht installiert sind. | Unter Windows ist die Sache nicht ganz so einfach, da so schöne Tools wie ''sed'' dort im Allgemeinen nicht installiert sind. | ||
Eine Funktion es [http://www.codeproject.com/Articles/1839/How-to-get-the-IP-Address-from-your-workstation hier]. Die dort beschrieben Funktion liefert nur die IP-Adresse der ersten Netzwerkkarte. Diese muss jedoch nicht die Aktive sein, z.B. wenn ein Notebook zwischen WLAN und LAN wandert. | Eine Funktion gibt es [http://www.codeproject.com/Articles/1839/How-to-get-the-IP-Address-from-your-workstation hier]. Die dort beschrieben Funktion liefert nur die IP-Adresse der ersten Netzwerkkarte. Diese muss jedoch nicht die Aktive sein, z.B. wenn ein Notebook zwischen WLAN und LAN wandert. | ||
Mit VBS kann eien Liste der IP-Adressen der Netzwerkkarten mit folgendem VBS ausgegeben werden. Funktioniert auch mit IPv4 udn IPv6 Adressen. | |||
<pre> | |||
Option Explicit | |||
' On Error Resume Next | |||
Dim colIPResults, objFile, objFSO, objNIC, objWMI, objWSHNetwork, strAddresses, strIPAddress, strWQL | |||
Const FOR_APPENDING = 8 | |||
Sub DestroyObjects() | |||
If IsObject(objFile) Then Set objFile = Nothing | |||
If IsObject(objFSO) Then Set objFSO = Nothing | |||
If IsObject(objWMI) Then Set objWMI = Nothing | |||
If IsObject(objWSHNetwork) Then Set objWSHNetwork = Nothing | |||
' If IsObject() Then Set = Nothing | |||
End Sub | |||
Set objFSO = CreateObject("Scripting.FileSystemObject") | |||
Set objWSHNetwork = CreateObject("WScript.Network") | |||
Set objWMI = GetObject("WinMGMTS:root\cimv2") | |||
strWQL = "SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'" | |||
Set colIPResults = objWMI.ExecQuery(strWQL) | |||
For Each objNIC In colIPResults | |||
For Each strIPAddress in objNIC.IPAddress | |||
If strAddresses = "" Then | |||
strAddresses = strIPAddress | |||
Else | |||
strAddresses = strAddresses + "<br />" + strIPAddress | |||
End If | |||
Next | |||
Next | |||
Dim ipaddr | |||
Set oShell = CreateObject( "WScript.Shell" ) | |||
If strAddresses ="0.0.0.0" Or strAddresses ="" or strAddresses = "undefined" Then | |||
ipaddr = "No Connection Detected" | |||
Else | |||
ipaddr = strAddresses | |||
End If | |||
echo ipaddr | |||
DestroyObjects() | |||
</pre> | |||
---- | ---- |
Version vom 25. April 2014, 10:42 Uhr
Heute stellte sich mir die Frage, wie stelle ich am einfach die IP-Adresse des Rechners unter Linux fest. Eine Google-Suche führte zu Forenbeitrag mit immer neuen Vorschlägen bis hin zu Laufzeitvergleichen der Vorschläge. Wenn Linux Shell Freak in Fahrt kommen, kann sie keiner halten. Wahrscheinlich werden die gesparten Milli-Sekunden sich im Laufe der Jahre zu einen deutlichen Gewinn an Lebenszeit summieren.
Die Frage ist außerdem nicht ganz präzise. Er Rechner hat immer die Loopback Adresse 127.0.0.1. Ein Rechner kann mehrere Netzwerkkarten haben, die wiederum mehrere IP-Adressen haben können. Im letzteren Fall erhalten die Netzwerkkarten allerdings zusätzliche Namen wie beispielsweise eth0:0, eth0:1. Ein VPN-Tunnel erzeugt eine virtuelle Netzwerkkarte mit einer eigenen IP-Adresse. Damit stellt sich die Frage: Welche IP-dresse hätten Sie denn gerne?
Beschränken wir uns auf zwei Fälle: Der Gerätename ich bekannt und alle IP-Adressen.
Anmerkung: Mein Rechner verwendet eine Netzwerkbrücke, deshalb ist die erste Adresse an br0 statt eth0 gebunden.
Bourne Again Shell (bash)
Fall 1:IP-Adresse eines Gerätes
u1@r1:~> /sbin/ifconfig br0 | sed -n '/inet Adresse:/ { s# *inet Adresse:##; s# .*##p }' 192.168.2.197
Fall 2: IP-Adresse aller Geräte
Wird der Gerätename br0 weg gelassen, liefert der Befehl eine Liste aller Adressen.
u1@r1:~> /sbin/ifconfig | sed -n '/inet Adresse:/ { s# *inet Adresse:##; s# .*##p }' 192.168.2.197 192.168.200.1 127.0.0.1
Wer eine andere Sprachlokalisation verwendet, muss hier den Teil “inet Adresse” anpassen. Ich nehme mir jetzt nicht die Zeit, dies zu Internationalisieren.
Gambas
Hier hab ich noch keine Lösung gefunden.
Windows
Unter Windows ist die Sache nicht ganz so einfach, da so schöne Tools wie sed dort im Allgemeinen nicht installiert sind.
Eine Funktion gibt es hier. Die dort beschrieben Funktion liefert nur die IP-Adresse der ersten Netzwerkkarte. Diese muss jedoch nicht die Aktive sein, z.B. wenn ein Notebook zwischen WLAN und LAN wandert.
Mit VBS kann eien Liste der IP-Adressen der Netzwerkkarten mit folgendem VBS ausgegeben werden. Funktioniert auch mit IPv4 udn IPv6 Adressen.
Option Explicit ' On Error Resume Next Dim colIPResults, objFile, objFSO, objNIC, objWMI, objWSHNetwork, strAddresses, strIPAddress, strWQL Const FOR_APPENDING = 8 Sub DestroyObjects() If IsObject(objFile) Then Set objFile = Nothing If IsObject(objFSO) Then Set objFSO = Nothing If IsObject(objWMI) Then Set objWMI = Nothing If IsObject(objWSHNetwork) Then Set objWSHNetwork = Nothing ' If IsObject() Then Set = Nothing End Sub Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWSHNetwork = CreateObject("WScript.Network") Set objWMI = GetObject("WinMGMTS:root\cimv2") strWQL = "SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'" Set colIPResults = objWMI.ExecQuery(strWQL) For Each objNIC In colIPResults For Each strIPAddress in objNIC.IPAddress If strAddresses = "" Then strAddresses = strIPAddress Else strAddresses = strAddresses + "<br />" + strIPAddress End If Next Next Dim ipaddr Set oShell = CreateObject( "WScript.Shell" ) If strAddresses ="0.0.0.0" Or strAddresses ="" or strAddresses = "undefined" Then ipaddr = "No Connection Detected" Else ipaddr = strAddresses End If echo ipaddr DestroyObjects()