IP-Adresse: Unterschied zwischen den Versionen

Aus Thomas Wiki
Zur Navigation springen Zur Suche springen
Zeile 39: Zeile 39:
<pre>
<pre>
Option Explicit
Option Explicit
' On Error Resume Next


Dim colIPResults, objFile, objFSO, objNIC, objWMI, objWSHNetwork, strAddresses, strIPAddress, strWQL
Dim colIPResults, objFile, objFSO, objNIC, objWMI, objWSHNetwork, strAddresses, strIPAddress, strWQL

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

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()