Page 1 sur 1
[hosts] fusionner plusieurs fichiers
Publié : jeu. 30 juil. 2009, 21:35
par astreides
Bonsoir
J'aimerais savoir sous linux s'il existe une commande permettant de fusionner plusieurs fichiers hosts et qui permet aussi d'éviter les doublons.
S'il existe un petit log le permettant je suis preneur.
Merci de votre aide
Re: [hosts] fusionner plusieurs fichiers
Publié : jeu. 30 juil. 2009, 21:43
par farvardin
cela doit être possible en bash, genre
Code : Tout sélectionner
cat /etc/hosts autrefichierhost.txt |sort |uniq > /tmp/fichierhostnettoye.txt
Re: [hosts] fusionner plusieurs fichiers
Publié : ven. 31 juil. 2009, 14:13
par astreides
Merci cela semble fonctionner.
Ce serait si quelqu'un a les compétences de faire un logiciel type hostmanager que l'on trouve sous windows et que j'utilisais :
http://www.libellules.ch/dotclear/index ... ts-manager
Re: [hosts] fusionner plusieurs fichiers
Publié : ven. 31 juil. 2009, 17:56
par wido
http://forums.archlinux.fr/post35855.html#p35855
ça va chercher un fichier host sur le site:
http://www.mvps.org/winhelp2002/hosts.htm
interface en zenity, il télécharge et il remplace. tu peux très bien l'améliorer.
Re: [hosts] fusionner plusieurs fichiers
Publié : ven. 31 juil. 2009, 20:14
par astreides
Merci pour ton script, vraiment sympa de ta part.
Cependant ce que j'aurais aimé c'est un script qui permet à partir d'une liste ou plusieurs listes téléchargées de pouvoir automatiser le fusionnage de ces listes dans le fichier /etc/hosts en gérant automatiquement les doublons.
Ton script remplace le fichier hosts originel par celui téléchargé ; il ne fusionne pas ensemble.
Merci encore de m'avoir proposer un début de solution.
Re: [hosts] fusionner plusieurs fichiers
Publié : ven. 31 juil. 2009, 22:02
par wido
tu peux très bien le modifier pour tes besoins en ajoutant plusieurs sources et un coup de nettoyage et voilà c'est réglé, si tu as des sites concernant les hosts indique les moi

Re: [hosts] fusionner plusieurs fichiers
Publié : sam. 01 août 2009, 10:31
par astreides
Bonjour
Comme je suis incompétent dans ce domaine, je sollicite donc si tu le veux ton aide.
Donc j'aimerais à partir de ces 3 listes de hosts :
-
http://kosvocore.free.fr/AdZHosts/
-
http://www.mvps.org/winhelp2002/hosts.txt
-
http://rlwpx.free.fr/WPFF/hosts.htm
(soit teléchargement auto dans un répetoire de mon choix ou soit télécharger manuellement)
un script qui fusionnerait ces trois listes tout en gérant les adresses qui font doublons et qui me l'écrirait dans le etc/hosts.
Merci
Re: [hosts] fusionner plusieurs fichiers
Publié : sam. 01 août 2009, 12:44
par chipster
Elles te servent à quoi ces listes de hosts ?
Re: [hosts] fusionner plusieurs fichiers
Publié : sam. 01 août 2009, 13:05
par farvardin
quelques questions :
- ce genre de listes n'est-il pas plus adapté à windows, qui se récupère facilement des virus qui vont faire des connexions automatiques sur ce type de sites ? (je vois mal un logiciel type "Adult Content Dialer" qui s'installe sur mon système linux)
- ne vaut-il pas mieux laisser gérer des listes anti pub par un module type adblock plus ? (même si cela ne fonctionne qu'avec firefox et pas konqueror, epiphany etc)
- blinder le /etc/hosts de sites merdiques à éviter, mais que l'on risque de rencontrer très peu sous linux dans les faits, ne risque-t-il pas au contraire de ralentir la navigation sur internet ? (puisque le système se réfère à ce fichier pour faire les résolutions DNS)
je vois par exemple que
http://www.mvps.org/winhelp2002/hosts.txt fait plus de 16000 lignes alors cela me semble peu rationnel de le rajouter sur un système unix.
À la rigueur, je préfère cibler les sites que je ne veux pas voir, mais ne pas mettre n'importe quoi dans le hosts pour autant.
Par exemple j'ai rajouté cela dans mon /etc/hosts :
Code : Tout sélectionner
127.0.0.1 pagead2.googlesyndication.com googlesyndication.com
127.0.0.1 rss.lefigaro.fr
127.0.0.1 lefigaro.fr
127.0.0.1 trax.motion-twin.com
127.0.0.1 experts-exchange.com
127.0.0.1 www.experts-exchange.com
Re: [hosts] fusionner plusieurs fichiers
Publié : sam. 01 août 2009, 15:18
par mimas
Yo ! Salut, les jeunes.
Je viens de recevoir un pager comme quoi vous désirez une solution pour fusionner des fichiers hosts. J'ai ça.
Tout d'abord j'utilise
adsuck (je ne suis plus sous arch) et une liste de filtres avec des expressions régulières (son nom /var/adsuck/filter). Je réalise la fusion avec l'aide d'un script lua qui utilise
lrexlib.
Code : Tout sélectionner
#!/usr/bin/lua
require "rex_posix"
domains = {}
local entry_duplicates = 0
local entry_count = 0
local entry_managed = 0
local entry_blacklisted = 0
local i
mynetwork=[[
127.0.0.1 localhost
192.168.0.1 routeur
192.168.0.69 patator
---- antipub ----
]]
blacklist = {}
function init_blacklist()
for i in io.lines("/var/adsuck/filter") do
if string.sub(i, 1, 1) ~= "#" then
print("blacklist: adding "..i)
table.insert(blacklist, rex_posix.new(i))
end
end
end
function black_listed(host)
if host == "localhost" then return 1 end
local i
for _,i in ipairs(blacklist) do
if i:find(host) ~= nil then
--print(i:find(host), host)
return true
end
end
return false
end
function read_hostsfile(filename)
print("reading "..filename)
for i in io.lines(filename) do
entry_count = entry_count + 1
for host in string.gmatch(i, "127.0.0.1%s+([%w%p]+)") do
if domains[host] == nil then
entry_managed = entry_managed + 1
if not black_listed(host) then
domains[host] = 1
else
entry_blacklisted = entry_blacklisted + 1
end
else
entry_duplicates = entry_duplicates + 1
end
end
end
end
function write_hosts()
local h = {}
local i
for i in pairs(domains) do
table.insert(h,i)
end
table.sort(h)
local f = io.open("hosts","w")
f:write(mynetwork)
for _,i in ipairs(h) do
f:write("0.0.0.0 "..i.."\n")
end
f:close()
end
if #arg <= 0 then
print("lua hosts.lua hosts1 hosts2 hosts3 ...")
os.exit(1)
end
init_blacklist()
for i=1,#arg do
read_hostsfile (arg[i])
end
print("Lines found : ".. entry_count)
print(" Managed : ".. entry_managed)
print(" Duplicates : ".. entry_duplicates)
print(" Blacklisted: ".. entry_blacklisted)
write_hosts()
Le script, hosts.lua, est pour un usage purement interne, il n'est donc peut-être pas très beau. On dira ici qu'il est sous GPLv3, ça vous va ?

Je ne mets pas les entêtes kivonbiens.
Il prend en compte le fichier d'expressions régulières de adsuck, nettoie les entrées qui correspondent, ce afin d'alléger le fichier, et ressort tout trié sous la forme "0.0.0.0 baddomain.com".
mynetwork contient la liste des références fixes, les machines du réseau par exemple.
Pour l'utiliser :
lua hosts.lua hosts1 hosts2 hosts3 .... Il génère le fichier hosts tout seul.
J'ai aussi un script moins évolué qui va extraire les noms de domaines filtrés par adblock+ dans le fichier pattern.ini du profil firefox. Il est rudimentaire et sous GPLv3 aussi.
Code : Tout sélectionner
#!/usr/bin/lua
require "rex_posix"
local count = 0
local i
blacklist = {}
function init_blacklist()
for i in io.lines("/var/adsuck/filter") do
if string.sub(i, 1, 1) ~= "#" then
table.insert(blacklist, rex_posix.new(i))
end
end
end
init_blacklist()
print ("####################")
print ("# Addblock domains #")
print ("####################")
for line in io.lines("patterns.ini") do
if string.sub(line, 1, 1) == "." and string.sub(line, -1) == "/" then
domain = string.sub(line,2,-2)
if not string.find(domain, "/", 1,1) then
blacklisted=false
for _,i in ipairs(blacklist) do
if i:find(domain) ~= nil then
blacklisted=true
break
end
end
if not blacklisted then
print(domain)
count = count + 1
end
end
end
end
print("# Count "..count)
Voilà.
Pour répondre aux question de farvardin, non ça ne ralenti pas et oui c'est utile car on évite de faire des requêtes inutiles sur tout ce qu'adblock ne connaît pas.. Et comme c'est généralisé à la machine, rien ne va sortir de notre réseau peu importe le programme utilisé, ce n'est pas limité à firefox. Puis si on installe ça sur une machine avec un proxy, ça roulaiz la maman ourse.
Je passerai pour voir les questions sur le script.
Re: [hosts] fusionner plusieurs fichiers
Publié : sam. 01 août 2009, 17:42
par astreides
l'avantage du fichiers aussi gros soit-il est qu'il n'alourdit pas la navigation et permet de l'utiliser sous differents navigateurs.
Sous firefox je n'utilise plus adblock plus qui me prenait de le ram pour rien et pour avoir utiliser les deux le fichiers hosts me semble plus efficace. Couplé à privoxy plus noscript, navigation tranquille.
D'où l'intéret d'avoir un log tel hotsmanager pour pouvoir gerer les listes hosts facilement.
Mimas je ne voit pas ton script hosts.lua ?
Merci
Re: [hosts] fusionner plusieurs fichiers
Publié : sam. 01 août 2009, 18:16
par mimas
Le premier dans la section code.
Le problème est que vous n'avez pas lrexlib dans archlinux (j'ai dû le compilé sur ma distro aussi). Si tu veux utiliser le script il te faut supprimer la ligne 'require "rex_posix"', garder la première ligne et la dernière ligne de la fonction black_listed() (celles avec localhost/return false ), puis vider la fonction init_blacklist().
Re: [hosts] fusionner plusieurs fichiers
Publié : sam. 01 août 2009, 22:24
par wido
mise à jour du script:
http://pastebin.archlinux.fr/pastebin.php?dl=355114
on se retrouve avec un fichier de 23Mo
tout ce qui ne commence pas par 127.0.0.1 sera effacé.
ça nettoie de trop je ne peux même plus accéder au site:
http://www.chauffeurdebuzz.com/ 
et mes popotins de stars

Re: [hosts] fusionner plusieurs fichiers
Publié : dim. 02 août 2009, 00:03
par astreides
Merci pour ton scrip mais lorsque je le lance il télécharge bien les fichiers hosts puis il s'arrete à la fin du dernier téléchargement ???
C'est vrai que cela fait un gros fichier qui est parfois restrectif ; il suffit simplement de commenter les lignes des adresses bloquées avec un petit #.
Merci
Re: [hosts] fusionner plusieurs fichiers
Publié : dim. 02 août 2009, 00:28
par marc[i1]
ton script souffre d’un défaut … tu le lance en root !
Toute la partie initiale ne nécessite pas de droit root ( téléchargement, décompression, trie, filtre ). Seule la mise en place dans /etc/hosts demande à être root.
Maintenant je te laisse te creuser la tête

Re: [hosts] fusionner plusieurs fichiers
Publié : dim. 02 août 2009, 08:46
par chipster
Au moins c'est demandé une fois pour toute

Attention quand même de laisser en dur dans le forum ce que vous faites car le wiki est vidé de temps à autres à cause des spammers fous. Même si vous cochez la case concerver tout le temps, ... il sera effacé

Re: [hosts] fusionner plusieurs fichiers
Publié : dim. 02 août 2009, 14:05
par wido
Code : Tout sélectionner
#!/bin/sh
# Mise à jour du fichier hosts
# /etc/hosts
#___________________________
#sur différents sites:
# http://www.mvps.org/winhelp2002/
# http://rlwpx.free.fr
# http://kosvocore.free.fr/
#___________________________
#Mise à jour le 02-09-09
lancement ()
{
rm -R /tmp/megahost
mkdir /tmp/megahost
dossier=/tmp/megahost
echo "127.0.0.1 localhost.localdomain localhost desktop" > $dossier/hosts_entete
# http://www.mvps.org/winhelp2002/
wget -c http://www.mvps.org/winhelp2002/hosts.txt -O $dossier/hosts.txt
# http://rlwpx.free.fr
wget -c http://rlwpx.free.fr/WPFF/hosts.7z -O $dossier/hosts.7z
# http://kosvocore.free.fr/
wget -c http://kosvocore.free.fr/AdZHosts/AdZHosts.zip -O $dossier/AdZHosts.zip
echo "téléchargement fini"
mv $dossier/hosts.txt $dossier/mvps
cd $dossier/
7z e $dossier/hosts.7z
cat $dossier/Hosts.blc $dossier/Hosts.pub $dossier/Hosts.rsk $dossier/Hosts.sex $dossier/Hosts.trc $dossier/Hosts.web | sort | uniq > $dossier/rlwpx
unzip -e $dossier/AdZHosts.zip
# On regroupe les différents fichiers hosts:
echo "Tri final - démarrage"
cat $dossier/mvps $dossier/rlwpx $dossier/AdZHosts/HOSTS | sort | uniq > $dossier/hosts1
#nettoyage tout ce qui ne commence pas par 127.0.0.1 sera effacé:
sed -n -i '/127.0.0.1/p' "$dossier/hosts1"
cat $dossier/hosts_entete $dossier/hosts1 > $dossier/hosts
gksu cp $dossier/hosts /etc/hosts
}
(echo ""; lancement) | zenity --progress --title "Hosts" --text="Téléchargement et installation en cours" --pulsate
## Si on clic sur Annuler...
if [ $? -ne 0 ]
then
exit 0
fi
zenity --question --title "Hosts" --text "$@ \
script terminé ."
## Si on clic sur Annuler...
if [ $? -ne 0 ]
then
exit 0
fi
Re: [hosts] fusionner plusieurs fichiers
Publié : dim. 02 août 2009, 18:13
par astreides
Bonjour et merci pour la mise à jour de ton script qui fonctionne.
J'aurais une petite question : les adresses que le hosts bloquent et dont je veux y aller je les commente par un # ce qui me permet de m'en souvenir.
Hors lors de la mise à jour par le script ces commentaires sont effacés.
Merci
Re: [hosts] fusionner plusieurs fichiers
Publié : dim. 02 août 2009, 20:57
par wido
tu peux très bien l'éditer après la mise à jour,
ou autre possibilité tu les ajoutes dans un fichier , et tu l'intègres dans le script
à la ligne:
si par exemple tu le mets sur dans ton home:
Code : Tout sélectionner
cat $dossier/hosts_entete $dossier/hosts1 /home/astreides/mon_host.txt > $dossier/hosts
comme cela il sera ajouté dans le fichier final.
la fonction sed ... sert uniquement à réduire la taille du fichier.
si tu n'as pas envie de ce traitement , tu peux très bien le commenter.
par
Re: [hosts] fusionner plusieurs fichiers
Publié : dim. 02 août 2009, 21:43
par mélodie
chipster a écrit : 
Attention quand même de laisser en dur dans le forum ce que vous faites
car le wiki est vidé de temps à autres à cause des spammers fous. Même si vous cochez la case concerver tout le temps, ... il sera effacé

Le *pastebin*...