Wie kann ich in Batch eine VPN-Detection einbauen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Erzesel  05.05.2021, 19:06

PS auch bei diesem Gratis-Lookup lasst sich abschätzen, ob eine Verbindung am erwarteten Standort befindet, oder irgendwo in der Pampa.

1
verreisterNutzer  05.05.2021, 20:42

Ich danke Dir wirklich sehr! Ich werde es später einmal ausprobieren.

0
verreisterNutzer  06.05.2021, 13:02

Wie kann ich eigentlich eine bestimmte MAC-Adresse zu einer Beschreibung anzeigen lassen?

https://prnt.sc/12kmrxn

0
Erzesel  06.05.2021, 21:32
@verreisterNutzer

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
1