2 votes

Comment puis-je détecter par programme la présence d'un VPN ?

J'aimerais pouvoir détecter de manière programmatique la présence d'un VPN sur un Mac. Détecter si une connexion VPN est active de manière programmatique montre ce que la sortie de netstat -nr ressemblera lorsqu'un VPN sera actif :

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
0/1                10.81.10.5         UGSc            5        0   utun1
...

Certaines informations sont importantes pour mon objectif, le reste ne l'est pas. Que dois-je vérifier exactement ? Seulement que Netif contient utun1 ? Ou dois-je voir 0/1 là aussi ? Ou si ce n'est pas le cas, que se passera-t-il alors ?

Je teste actuellement le premier et le dernier élément de données de cette ligne, et cela semble fonctionner, mais j'aimerais réduire la probabilité de tout faux positif ou négatif. En Ruby, c'est :

# This is determined by whether or not a line like the following
# appears in the output of `netstat -nr`:
# 0/1                10.137.0.41        UGSc           15        0   utun1
def vpn_running?
  run_os_command('netstat -nr').split("\n").grep(/^0\/1.*utun1/).any?
end

2voto

Michael Sattler Points 23

C'est exactement ce que j'ai dans mon propre code. En bash, ça ressemble à :

vpn=$( netstat -rn | grep utun1 | wc -l )
if [[ $vpn -eq 0 ]] ; then
    # no VPN active
else
    # VPN active
fi

Il a été assez fiable dans mon environnement. J'aimerais être en mesure de discerner les différentes configurations VPN en vigueur, mais pas au point de devoir le coder (pour l'instant).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X