Batch Erfassen Sie eingehende Netstat-IPs als Variable

1077
user23412

Ich versuche herauszufinden, ob es eine Möglichkeit gibt, die von 'netstat' angezeigten IP-Adressen zu erfassen (und wenn möglich zu protokollieren). Ich versuche, ein Skript zu erstellen, das auf einen Ping von einem bestimmten Host wartet. Gibt es eine Möglichkeit, diese Informationen in einer funktionsfähigen Variablen zu erfassen, die ich dann in einem Skript verwenden kann? Ich habe die Ausgabe in eine Textdatei geleitet, verstehe aber immer noch nicht, wie ich die IPs aus der Textdatei in Variablen erfassen kann

Danke im Voraus

1
Haben Sie versucht, die Ausgabe von netstat in eine Textdatei umzuleiten: `netstat> log.txt`? Doktoro Reichard vor 9 Jahren 0
Ist das [PowerShell-Skript] (http://www.kennethghartman.com/log-connections-powershell-script/) von Shay Levi etwas für Sie? nixda vor 9 Jahren 0
Ich leite gerade Ergebnisse in eine .txt-Datei und werde einen Blick in das Powershell-Skript werfen. Vielen Dank user23412 vor 9 Jahren 0

2 Antworten auf die Frage

0
barlop

Wenn Sie eine Textdatei mit IPs haben und nur die IPs wünschen, ist netstat irrelevant.

Holen Sie sich grep von gnuwin32 und der richtigen Regex. Das wird es tun

C:\blah>grep -oP (\d\.)\d filewithips 

try arp -a>myfileoder netstat -aon> a Dann hast du eine Datei mit IPs unter anderen Infos und du willst nur, dass die IPs jetzt den grep-Befehl ausführen, den ich dir gegeben habe, und du bekommst nur die IPs

oder dieses

C:\>netstat -aon | grep -oP (\d\.)\d 

gibt eine Liste von IPs aus

Sie könnten eine for-Schleife ausführen, indem Sie einfach jede Zeile in eine Variable einlesen

dann geht es nicht darum, IPs zu lesen, sondern nur Zeilen einer Datei zu lesen.

0
nixda

Dieses Skript veranschaulicht, wie die netstatAusgabe-IPs in Variablen in PowerShell gespeichert werden

Führen Sie einfach das Skript in PowerShell ISE aus, öffnen Sie einen neuen Browser, besuchen Sie www.google.com und sehen Sie, was passiert.

$allIPs = [System.Net.Dns]::GetHostAddresses("www.google.com") $myIP = $allIPs[0].IPAddressToString  while ($true) { cls netstat -n | select-string "$myIP.*ESTABLISHED" | foreach { $part = $_.line.split(' ',[System.StringSplitOptions]::RemoveEmptyEntries) $localIP = $part[1] -replace ":.*", ""  $remoteIP = $part[2] -replace ":.*", ""  write-host $localIP $remoteIP } sleep 2 }  

Nach dem Start werden alle Verbindungen netstat -nalle 2 Sekunden ( while ($true)zusammen mit sleep 2) abgefragt.

Zur Beschleunigung von netstat ist -n(numerisch) der wichtigste Parameter, da keine DNS-Suchvorgänge durchgeführt werden. Weitere Informationen zu anderen Parametern finden Sie wie -aund -obei Technet

Als Nächstes filtert PowerShell nur bestehende Verbindungen ( select-string "$myIP.*ESTABLISHED") zu z. B. www.google.com. Dies ist nur ein Beispiel, um zu zeigen, wie es funktioniert. Veränderung

$myIP = $allIPs[0].IPAddressToString 

auf die IP, auf die Sie auf einen Ping warten

$myIP = '192.168.1.1' 

Der letzte Teil besteht darin, die Zeilen durch Leerzeichen ( $_.line.split(' ') aufzuteilen, diese Leerzeichen anschließend zu [System.StringSplitOptions]::RemoveEmptyEntriesentfernen ( ), den Port ( -replace ":.*", "") zu entfernen und die Ergebnisse in den entsprechenden Variablen zu speichern.

Sie können mit ihnen machen, was immer Sie wollen. Ich wiederholte sie nur mitwrite-host $localIP $remoteIP

das sieht sehr cool aus, obwohl powershell nicht batch ist .. auch bezüglich netstat -n alle zwei Sekunden ... Ich würde bemerken, dass es ein Programm MS 'port reporter' gibt, das wie ein fortlaufend protokolliertes netstat ist, obwohl ms port reporter seens ist nur tcp barlop vor 9 Jahren 0