Alors, ça ne me concerne (pour l’instant) plus car aucun des réseaux auxquels je connecte mon PC n’a de proxy, mais j’ai été dans cette situation il y a quelques années, et je procédais ainsi.
D’abord, un script lancé par NetworkManager se charge d’identifier le réseau auquel je viens de me connecter. Il utilise pour ça toute information disponible dans la réponse DHCP du réseau permettant d’identifier de manière unique un réseau donné (l’idéal est la variable DHCP4_DOMAIN_NAME, mais tous les serveurs DHCP ne fournissent pas cette information). Une fois le réseau identifié, il écrit un nom arbitraire pour ce réseau dans le fichier /var/state/network.
#!/bin/shinterface=1ドルstatus=2ドルcase"$status" in
up)if["x$DHCP4_DOMAIN_NAME"='xschool.example'];thenecho school > /var/state/network
elif["x$DHCP4_DOMAIN_NAME"='xcompany.example'];thenecho company > /var/state/network
elif["x$IP4_NAMESERVERS"='x203.0.113.65'];then# Cas d'un réseau qui ne fournit que très peu d'infos,# on se base sur l'adresse du serveur DNS indiqué dans# la réponse DHCP -- en espérant qu'elle ne change pas# au cours du temps...echo discret > /var/state/network
elseecho unknown > /var/state/network
# On dumpe toutes les variables dans un fichier,# dans l'espoir d'y trouver des infos qui permettront# de mieux caractériser ce réseau inconnu
env > /var/state/network.infos
fi;;esac
Le contenu du fichier /var/state/network peut ensuite être utilisé par d’autres scripts pour toutes les actions qui doivent varier en fonction du réseau. En particulier, un script se charge d’écrire les informations relatives aux proxys dans un fichier /etc/proxy.conf :
#!/bin/sh["x2ドル"= xup ]||exit0case"$(< /var/state/network)" in
school)echoPROXY_ON=1 > /etc/proxy.conf
echoPROXY_HOST=www-cache.school.example >> /etc/proxy.conf
echoPROXY_PORT=3128 >> /etc/proxy.conf
echoEXCEPTIONS=.school.example >> /etc/proxy.conf
;;
company)echoPROXY_ON=1 > /etc/proxy.conf
echoPROXY_HOST=cache.company.example >> /etc/proxy.conf
echoPROXY_PORT=3128 >> /etc/proxy.conf
echoEXCEPTIONS= >> /etc/proxy.conf
;;
*)# No proxy on the other networks
cat /dev/null > /etc/proxy.conf
;;esac
À ce stade, on se retrouve avec un fichier /etc/proxy.conf qui contient les informations sur le proxy à utiliser. Le reste est l’affaire d’un script exécuté au démarrage d’une session (par exemple dans ~/.xprofile), qui doit lire ce fichier et s’assurer que tous les programmes tiennent compte du proxy. C’était la partie la plus délicate car tous les programmes n’ont pas le bon goût de respecter la variable d’environnement http_proxy ... Je n’ai plus ce script sous la main, mais de mémoire il faisait à peu près ça :
définir http_proxy et no_proxy pour les programmes bien élevés ;
éditer le fichier de configuration KDE définissant le proxy pour toutes les applications KDE (je ne sais plus quel était ce fichier, mais de toute façon depuis le temps ça a peut-être changé) ;
éditer le fichier .mozilla/firefox/{profile}/prefs.js pour Firefox (qui à une époque n’était pas un programme bien élevé) ;
définir un alias java=java -Dhttp.proxyHost=proxy_host -Dhttp.proxyPort=proxy_port pour les programmes Java ;
et peut-être encore deux ou trois autres cas particuliers.
Globalement, ce n’était sûrement pas une solution parfaite, mais ça marchait quand même à peu près bien (mis à part le fait que le passage d’un réseau à un autre n’était pas pris en compte immédiatement, il fallait redémarrer la session graphique pour que le script .xprofile relise /etc/proxy.conf et que l’environnement soit mis à jour — mais comme il ne m’arrivait que rarement de changer de réseau pendant une session, ce n’était pas très gênant).
# Mon bidouillage perso
Posté par gouttegd . En réponse au message Choix du proxy fonction du reseau.. Évalué à 7.
Alors, ça ne me concerne (pour l’instant) plus car aucun des réseaux auxquels je connecte mon PC n’a de proxy, mais j’ai été dans cette situation il y a quelques années, et je procédais ainsi.
D’abord, un script lancé par NetworkManager se charge d’identifier le réseau auquel je viens de me connecter. Il utilise pour ça toute information disponible dans la réponse DHCP du réseau permettant d’identifier de manière unique un réseau donné (l’idéal est la variable
DHCP4_DOMAIN_NAME, mais tous les serveurs DHCP ne fournissent pas cette information). Une fois le réseau identifié, il écrit un nom arbitraire pour ce réseau dans le fichier/var/state/network.Le contenu du fichier
/var/state/networkpeut ensuite être utilisé par d’autres scripts pour toutes les actions qui doivent varier en fonction du réseau. En particulier, un script se charge d’écrire les informations relatives aux proxys dans un fichier/etc/proxy.conf:À ce stade, on se retrouve avec un fichier
/etc/proxy.confqui contient les informations sur le proxy à utiliser. Le reste est l’affaire d’un script exécuté au démarrage d’une session (par exemple dans~/.xprofile), qui doit lire ce fichier et s’assurer que tous les programmes tiennent compte du proxy. C’était la partie la plus délicate car tous les programmes n’ont pas le bon goût de respecter la variable d’environnementhttp_proxy... Je n’ai plus ce script sous la main, mais de mémoire il faisait à peu près ça :http_proxyetno_proxypour les programmes bien élevés ;.mozilla/firefox/{profile}/prefs.jspour Firefox (qui à une époque n’était pas un programme bien élevé) ;java=java -Dhttp.proxyHost=proxy_host -Dhttp.proxyPort=proxy_portpour les programmes Java ;Globalement, ce n’était sûrement pas une solution parfaite, mais ça marchait quand même à peu près bien (mis à part le fait que le passage d’un réseau à un autre n’était pas pris en compte immédiatement, il fallait redémarrer la session graphique pour que le script
.xprofilerelise/etc/proxy.confet que l’environnement soit mis à jour — mais comme il ne m’arrivait que rarement de changer de réseau pendant une session, ce n’était pas très gênant).