Tester l'état d'un VPN avec PB ??? Solutions ???

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Tester l'état d'un VPN avec PB ??? Solutions ???

Message par cage »

Bonsoir a tous,

Comme beaucoup de personnes, j’utilise parfois un VPN pour me connecter a internet.
Dans certaines de mes applications, j'ai besoin de connaitre le status du VPN (connecté ou pas)
Dans le code suivant, je montre la méthode que j'utilise pour tester le VPN.
Cette méthode s'appuie sur la réponse faite par un site internet qui répond de la façon suivante:
code 200 soit #HTTP_STATUS_OK qui indique que le VPN est INACTIF
code 403 soit #HTTP_STATUS_FORBIDDEN qui indique que le VPN est ACTIF
Connaissez vous une autre méthode pour tester si le VPN est Actif/Inactif
Merci pour vos retours,
cage

Code : Tout sélectionner

EnableExplicit

Global MYLAN, MYWAN, MYVPN

Global IP_LAN$, IP_WAN$

Procedure get_IP_LAN()
  Debug "get_IP_LAN()"
  Protected IP, IP$
  MYLAN = #True
  If ExamineIPAddresses()
    Repeat
      IP  = NextIPAddress()
      IP$ = IPString(IP)
      If Left(IP$, 3) <> "10."
        Break
      EndIf
    Until IP = 0
  EndIf
  IP_LAN$ = IP$
  If IP_LAN$="0.0.0.0"
    MYLAN = #False
  EndIf
  ProcedureReturn MYLAN
EndProcedure

Procedure get_IP_WAN()
  Debug "get_IP_WAN()"
  Protected HTTPRequest, HTTPStatus$, HTTPResponse$
  Protected URL$ = "http://monip.outils-rezo.info/text"
  MYWAN   = #True
  IP_WAN$ = "0.0.0.0"
  If MYLAN
    HTTPRequest = HTTPRequest(#PB_HTTP_Get,URL$,#Null$,#PB_HTTP_NoRedirect)
    If HTTPRequest
      HTTPStatus$   = HTTPInfo(HTTPRequest,#PB_HTTP_StatusCode)
      HTTPResponse$ = HTTPInfo(HTTPRequest,#PB_HTTP_Response)
      FinishHTTP(HTTPRequest)
    EndIf
    If Val(HTTPStatus$) = #HTTP_STATUS_OK
      MYWAN   = #True
      IP_WAN$ = HTTPResponse$
    Else
      MYWAN   = #False
      IP_WAN$ = "0.0.0.0"
    EndIf
  Else
    MYWAN = #False
  EndIf
  ProcedureReturn MYWAN
EndProcedure

Procedure check_VPN()
  Debug "check_VPN()"
  Protected HTTPRequest, HTTPStatus$
  Protected URL$ = "https://www.malekal.com/detecter-vpn-recuperation-vraie-ip/"
  MYVPN = #False
  If MYLAN
    HTTPRequest = HTTPRequest(#PB_HTTP_Get,URL$,#Null$,#PB_HTTP_HeadersOnly|#PB_HTTP_NoRedirect)
    If HTTPRequest
      HTTPStatus$ = HTTPInfo(HTTPRequest,#PB_HTTP_StatusCode)
      FinishHTTP(HTTPRequest)
      Debug HTTPStatus$
      If Val(HTTPStatus$) = #HTTP_STATUS_FORBIDDEN
        MYVPN = #True
      Else
        MYVPN = #False
      EndIf
    EndIf
    Debug ""
    ProcedureReturn Val(HTTPStatus$)
  Else
    MYVPN = #False
    Debug "LAN INACTIF"
    ProcedureReturn #False
  EndIf
EndProcedure

get_IP_LAN() : Debug IP_LAN$
Debug ""
get_IP_WAN() : Debug IP_WAN$
Debug ""
check_VPN()
If MYVPN
  Debug "VPN ACTIF"
Else
  Debug "VPN INACTIF"
EndIf
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Tester l'état d'un VPN avec PB ??? Solutions ???

Message par cage »

Bonjour,

Voici une solution en VBS +WMI. Fonctionne avec NordVPN dans mon cas.

Pour ceux qui connaissent bien les API Windows, je pense qu'il est possible de réaliser la même chose a l'aide des API.

Quelqu'un pourrait-il m'aider a transformer ce code VBS en PB+API

Merci,
cage

Code : Tout sélectionner

Wscript.Echo IsVPNConnected()

Function IsVPNConnected()
	
  sComputer = "."
	IsVPNConnected = False

	Set oWMIService = GetObject("winmgmts:\\" _
	& sComputer & "\root\CIMV2")

	Set colItems = oWMIService.ExecQuery( _
	"SELECT * FROM Win32_NetworkAdapterConfiguration",,48)

  For Each objItem in colItems

		'Wscript.Echo objItem.Description

'Veuillez vérifier la description de votre connexion VPN en exécutant la commande "ipconfig /all" en "Invite de commandes".

    If (InStr(LCase(objItem.Description),"nordlynx tunnel")) Then ' NordVPN
			IsVPNConnected = objItem.IPEnabled
			'Wscript.Echo objItem.ServiceName
			'For Each objIP in objItem.IPAddress
			'	Wscript.Echo objIP
			'Next
    End If
		
  Next

	If(IsVPNConnected) Then
		IsVPNConnected = "VPN is Up."
	Else
		IsVPNConnected = "VPN is Down."
	End If

End Function

'''Carte inconnue NordLynx :
'''
'''   Suffixe DNS propre à la connexion. . . :
'''   Description. . . . . . . . . . . . . . : NordLynx Tunnel
'''   Adresse physique . . . . . . . . . . . :
'''   DHCP activé. . . . . . . . . . . . . . : Non
'''   Configuration automatique activée. . . : Oui
'''   Adresse IPv6 de liaison locale. . . . .: fe80::723e:7ca:789d:a5aa%64(préféré)
'''   Adresse IPv4. . . . . . . . . . . . . .: 10.5.0.2(préféré)
'''   Masque de sous-réseau. . . . . . . . . : 255.255.0.0
'''   Passerelle par défaut. . . . . . . . . : 0.0.0.0
'''   Serveurs DNS. . .  . . . . . . . . . . : 103.86.96.100
'''                                            103.86.99.100
'''   NetBIOS sur Tcpip. . . . . . . . . . . : Activé

''' https://vpnapi.io/api-documentation
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Tester l'état d'un VPN avec PB ??? Solutions ???

Message par cage »

Bonjour,

En attendant d'avoir une solution a base d'API Windows, voici une solution provisoire avec du vbs

Si quelqu'un maitrise bien le vbs, merci de vos retours sur mon script checkmyvpn.vbs

cage

Code PB checkmyvpn.pb :

Code : Tout sélectionner

EnableExplicit

Global MYVPN

Procedure check_VPN()
  Protected Running, Output$
  Protected FLAGS = #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide
  MYVPN = #False
  Running = RunProgram("cscript.exe", "checkmyvpn.vbs", "", FLAGS)
  If Running
    While ProgramRunning(Running)
      If AvailableProgramOutput(Running)
        Output$ + ReadProgramString(Running) + Chr(13)
      EndIf
    Wend
    MYVPN = ProgramExitCode(Running)
    CloseProgram(Running)
  EndIf
  ProcedureReturn MYVPN
EndProcedure

Repeat
  If check_VPN()
    Debug "VPN UP"
  Else
    Debug "VPN DOWN"
  EndIf
  Delay(5000)
ForEver
Code VBS checkmyvpn.vbs:

Code : Tout sélectionner

Function IsVPNConnected()
	
  sComputer = "."
	IsVPNConnected = False

	Set oWMIService = GetObject("winmgmts:\\" _
	& sComputer & "\root\CIMV2")

	Set colItems = oWMIService.ExecQuery( _
	"SELECT * FROM Win32_NetworkAdapterConfiguration",,48)

  For Each objItem in colItems
		'Wscript.Echo objItem.Description
		'Veuillez vérifier la description de votre connexion VPN en exécutant la commande "ipconfig /all" en "Invite de commandes".

    If (InStr(LCase(objItem.Description),"tap")) Or _
    	 (InStr(LCase(objItem.Description),"vpn")) Or _
			 (InStr(LCase(objItem.Description),"nordlynx tunnel")) Then ' NordVPN
			 IsVPNConnected = objItem.IPEnabled
    End If
		
  Next

	'The True  keyword has a value equal to -1, 1 for purebasic
	'The False keyword has a value equal to  0, 0 for purebasic
	
	If(IsVPNConnected) Then
		IsVPNConnected = 1
	Else
		IsVPNConnected = 0
	End If

End Function

WScript.Quit IsVPNConnected
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Répondre