Wie kann ich in Batch eine VPN-Detection einbauen?
Mit der Seite kann ich überprüfen, ob die jeweilige IP-Adresse ein möglicher Proxy/VPN ist und so eine Funktion möchte ich auch in Batch hinbiegen.
Mit dieser Funktion kann ich ja nur sehen, was dieser Adapter für ein Typ ist und bei Medienstatus steht immer Medium getrennt (getestet).
In die .txt-Datei wird bereits die Öffentliche IP-Adresse eingetragen, aber es soll auch gleich mit drin stehen, ob dies ein Proxy/VPN ist.
- Quellcode bei Anfrage
1 Antwort
Mit Bordmitteln kannst Du nicht prüfen ob sich eine externe Verbindung hinter einem Proxy befindet.
Anbieter wie die von Dir verlinkte Seite verfügen über Datenbanken in denen bekannte Proxys gelichtet sind und gleichen eine Adresse mit diesen ab.
Mit der Seite kann ich überprüfen, ob die jeweilige IP-Adresse ein möglicher Proxy/VPN ist.
Wenn Du das kannst, verfügst Du über einen gültigen API-Key? wo ligt dan das problem? dann rufst Du mittels curl das json ab und wertest dieses aus...
Kein Akt.
Ich habe keinen gültigen API-Key für Deine Seite deshalb zelebriere ich die Auflösung eines json mit mit einem anderen Anbieter und frei verfügbaren Daten.
In Batch ist das Auswerten eines json eher ein String-Gemetzel als reelles auflösen eines Objects 🥵
demo.cmd
@echo off
chcp 65001 >nul
setlocal enableDelayedExpansion
rem Hier zur Demo die IPv6 von Gutefrage.net (kann auch eien IPv4 sein)
rem für die eigene IP: set "LookupIP="
set "LookupIP=2001:780:12e::42"
if defined LookupIP (set "LookupIP=/%LookupIP%")
rem daten Abrufen und filtern
for /f "tokens=1* delims=: " %%a in ('curl http://ipinfo.io%LookupIP%/json 2^>nul ^|findstr /v "{ } readme" ') do (
set "__dummy=%%~b"
set "LookUp.%%~a=!__dummy:",=!"
)
echo:
echo folgende BatchVariablen wurden erzeugt:
set "lookup"
echo:
echo Die IP ist %LookUp.ip%
rem der Verbinungsstandort ist nicht Dein realer Standort, sondern der, wo sich Hauptverteiler für Deine Umgebung befindet
echo Der Verbindungsstandort ist %LookUp.postal% %LookUp.city%
echo Breiten- und Längengrad %LookUp.loc%
echo Ländercode: %LookUp.country% Bundesland %LookUp.region%
echo Die Zeitzone %LookUp.timezone%
rem Browser mit Googlemaps und Standortdaten aufrufen (Test, bei mir klappt es)
rem zeigt auf das Statdzentrum
start "" "https://www.google.com/maps/search/%LookUp.loc%"
pause
Wie ermittelt man die IP eines Hosts? ...mit Ping
set "pingHost=gutefrage.net"
for /f "tokens=2 delims=[]" %%a in ('ping /n 1 "%pingHost%"^|find "Daten"') do (set "resultIP=%%a")
echo ip von "%pingHost%" : %resultIP% .
pause
PS auch bei diesem Gratis-Lookup lasst sich abschätzen, ob eine Verbindung am erwarteten Standort befindet, oder irgendwo in der Pampa.
soll nur angezeigt werden genügt das Filtern von ipconfig /all mit findstr:
ipconfig /all|findstr ".-Adapter Beschreibung Physische IPv4"
Sollen die Eigenschaften in Variablen verarbeitet werden ist das unhandlich.
Ich habe habe 3 Physische Netzwerk Adapter (Ethenet, USB-Tethering, BT-Tethering). Da gestaltet sich das Filtern von ipconfig /all als relativ blöd. (mache ich auch sonst nicht)
Wenn es um das Abrufen von Systemzuständen geht ist die WMI die beste Hausnummer. (Wer die WMI beherrscht, beherrscht das System. Die Schnittstelle für Batch ist WMIC
Für Netzwerkadapter sind die die Aliases: nic und nicconfig verfügbar.
wmic nic
wmic nicconfig
Das Zuweisen an Variablen ist billig (am besten mit Ausgabeformat CSV agieren).
demo.cmd
@echo off
rem lass WMIC nur die physischen Adapter filtern
rem und fordere die Daten von: InterfaceIndex,MACAddress,Name,NetConnectionID,NetEnabled,Speed und dem letzten ausgefüllten Feld an
rem das letzte brauchen wir nicht! es dient nur dazu um einen Bug abzufangen. WMIC beendet Zeilen mit eiem UNIX-Zeilenvorschub was blöde Effekte haben kann)
for /f "skip=2 tokens=2-7 delims=," %%a in ('wmic nic where PhysicalAdapter^="TRUE" get InterfaceIndex^,MACAddress^,Name^,NetConnectionID^,NetEnabled^,Speed^,TimeOfLastReset /format:csv') do (
for %%v in ("InterfaceIndex=%%a","MACAddress=%%b" ,"Name=%%c","NetConnectionID=%%d","NetEnabled=%%e","Speed=%%f") do (
rem da mehere Adapter heute üblich sind erzeugen wir eindeutige VariablenNamen (der InterfaceIndex eiendeutig genug)
set "Netadapter.%%a.%%~v"
)
)
echo alle bisher erzeugeten Variablen:
set Netadapter.
echo:
rem weitere Daten mit wmic nicconfig abrufen. (hier kommt uns der InterfaceIndex zugute, welcher eine eindeutige Zuordnung der hinzukommenden Daten ermöglicht)
for /f "tokens=2 delims=." %%I in ('set Netadapter.^|find ".InterfaceIndex="') do (
for /f "skip=2 tokens=2-6 delims=," %%a in ('wmic nicconfig where InterfaceIndex^=%%I get DefaultIPGateway^,DHCPEnabled^,DHCPServer^,IPAddress^,IPSubnet^,SettingID /format:csv') do (
for %%v in ("DefaultIPGateway=%%a","DHCPEnabled=%%b" ,"DHCPServer=%%c","IPAddress=%%d","IPSubnet=%%e") do (
set "Netadapter.%%I.%%~v"
)
)
)
echo alle bisher erzeugeten Variablen:
set Netadapter.
echo:
rem das weitere zelegen der {Daten} ist auch billig:
for /f "tokens=2,3* delims=.=" %%a in ('set Netadapter.^|findstr "IPAddress= IPSubnet"') do (
if "%%b"=="IPAddress" (for /f "tokens=1,2 delims={;}" %%i in ("%%c") do (
set "Netadapter.%%a.IPv4=%%i"
set "Netadapter.%%a.VerbindungslokaleIPv6=%%j"
))
if "%%b"=="IPSubnet" (for /f "tokens=1 delims={;}" %%i in ("%%c") do (
set "Netadapter.%%a.SubnetMask=%%i"
))
)
echo alle bisher erzeugeten Variablen:
set Netadapter.
pause
Ich danke Dir wirklich sehr! Ich werde es später einmal ausprobieren.
Wie kann ich eigentlich eine bestimmte MAC-Adresse zu einer Beschreibung anzeigen lassen?
https://prnt.sc/12kmrxn