[hosts] fusionner plusieurs fichiers

Applications, problèmes de configuration réseau
Répondre
astreides
Chu Ko Nu
Messages : 433
Inscription : dim. 27 janv. 2008, 09:37

[hosts] fusionner plusieurs fichiers

Message 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
farvardin
Maître du Kyudo
Messages : 1084
Inscription : sam. 29 mars 2008, 22:56

Re: [hosts] fusionner plusieurs fichiers

Message par farvardin »

cela doit être possible en bash, genre

Code : Tout sélectionner

cat /etc/hosts autrefichierhost.txt |sort |uniq  > /tmp/fichierhostnettoye.txt 
astreides
Chu Ko Nu
Messages : 433
Inscription : dim. 27 janv. 2008, 09:37

Re: [hosts] fusionner plusieurs fichiers

Message 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
Avatar de l’utilisateur
wido
Chu Ko Nu
Messages : 497
Inscription : mar. 21 oct. 2008, 20:59

Re: [hosts] fusionner plusieurs fichiers

Message 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.
Dernière modification par wido le dim. 02 août 2009, 14:07, modifié 1 fois.
Image
astreides
Chu Ko Nu
Messages : 433
Inscription : dim. 27 janv. 2008, 09:37

Re: [hosts] fusionner plusieurs fichiers

Message 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.
Avatar de l’utilisateur
wido
Chu Ko Nu
Messages : 497
Inscription : mar. 21 oct. 2008, 20:59

Re: [hosts] fusionner plusieurs fichiers

Message 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 :)
Image
astreides
Chu Ko Nu
Messages : 433
Inscription : dim. 27 janv. 2008, 09:37

Re: [hosts] fusionner plusieurs fichiers

Message 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
Avatar de l’utilisateur
chipster
Maître du Kyudo
Messages : 2063
Inscription : ven. 11 août 2006, 22:25
Localisation : Saint-Étienne (42)
Contact :

Re: [hosts] fusionner plusieurs fichiers

Message par chipster »

Elles te servent à quoi ces listes de hosts ?
farvardin
Maître du Kyudo
Messages : 1084
Inscription : sam. 29 mars 2008, 22:56

Re: [hosts] fusionner plusieurs fichiers

Message 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
Avatar de l’utilisateur
mimas
Elfe
Messages : 559
Inscription : sam. 30 sept. 2006, 22:30
Localisation : Toulouse

Re: [hosts] fusionner plusieurs fichiers

Message 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.
Anarchy for the triple A.
astreides
Chu Ko Nu
Messages : 433
Inscription : dim. 27 janv. 2008, 09:37

Re: [hosts] fusionner plusieurs fichiers

Message 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
Avatar de l’utilisateur
mimas
Elfe
Messages : 559
Inscription : sam. 30 sept. 2006, 22:30
Localisation : Toulouse

Re: [hosts] fusionner plusieurs fichiers

Message 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().
Anarchy for the triple A.
Avatar de l’utilisateur
wido
Chu Ko Nu
Messages : 497
Inscription : mar. 21 oct. 2008, 20:59

Re: [hosts] fusionner plusieurs fichiers

Message 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/ :shock: et mes popotins de stars :roll:
Image
astreides
Chu Ko Nu
Messages : 433
Inscription : dim. 27 janv. 2008, 09:37

Re: [hosts] fusionner plusieurs fichiers

Message 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
Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)

Re: [hosts] fusionner plusieurs fichiers

Message par marc[i1] »

wido a écrit :mise à jour du script: http://pastebin.archlinux.fr/pastebin.php?dl=355114
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 ;)
Ne vous emmerdez plus, emmerdez les autres.
Avatar de l’utilisateur
chipster
Maître du Kyudo
Messages : 2063
Inscription : ven. 11 août 2006, 22:25
Localisation : Saint-Étienne (42)
Contact :

Re: [hosts] fusionner plusieurs fichiers

Message par chipster »

Au moins c'est demandé une fois pour toute :D

:!: 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é :mrgreen:
Avatar de l’utilisateur
wido
Chu Ko Nu
Messages : 497
Inscription : mar. 21 oct. 2008, 20:59

Re: [hosts] fusionner plusieurs fichiers

Message 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
Image
astreides
Chu Ko Nu
Messages : 433
Inscription : dim. 27 janv. 2008, 09:37

Re: [hosts] fusionner plusieurs fichiers

Message 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
Avatar de l’utilisateur
wido
Chu Ko Nu
Messages : 497
Inscription : mar. 21 oct. 2008, 20:59

Re: [hosts] fusionner plusieurs fichiers

Message par wido »

tu peux très bien l'éditer après la mise à jour,

Code : Tout sélectionner

gksu gedit /etc/hosts
ou autre possibilité tu les ajoutes dans un fichier , et tu l'intègres dans le script

à la ligne:

Code : Tout sélectionner

cat $dossier/hosts_entete $dossier/hosts1 > $dossier/hosts
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.

Code : Tout sélectionner

sed -n -i '/127.0.0.1/p' "$dossier/hosts1"
par

Code : Tout sélectionner

#sed -n -i '/127.0.0.1/p' "$dossier/hosts1"
Image
Avatar de l’utilisateur
mélodie
Maître du Kyudo
Messages : 2784
Inscription : lun. 30 oct. 2006, 02:06
Localisation : Pyrénées

Re: [hosts] fusionner plusieurs fichiers

Message 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é :mrgreen:
:non: :non:

Le *pastebin*...
Répondre