2009-08-07 6 views
7

Disons que j'ai une liste d'adresses IP entrant dans un journal que je suis tailing:passe stdin dans l'hôte Unix ou commande creuser

1.1.1.1 
1.1.1.2 
1.1.1.3 

Je voudrais les résoudre facilement les noms d'hôtes. Je voudrais pouvoir

tail -f access.log | host - 

Qui échoue en tant qu'hôte ne comprend pas l'entrée de stdin de cette manière. Quel est le moyen le plus simple de faire sans avoir à écrire un fichier statique ou un repli sur perl/python/etc.?

Répondre

19

Utilisation xargs -l:

tail -f access.log | xargs -l host 
+0

Cela va en fait hiccup car hôte sera réellement exécuté avec hôte 1.1.1.1 1.1.1.2 Causant une recherche DNS sur un serveur DNS non valide. Mettre "-d '\ n'" ne semble pas aider. – tomasz

+6

Utilisez "xargs -l" (ou "xargs -L 1") pour vous assurer que la commande est exécutée pour chaque ligne. –

4

Vous pouvez également utiliser la read builtin:

tail -f access.log | while read line; do host $line; done 
3

Dans les commandes ci-dessous, remplacez cat avec tail -f, etc. si nécessaire.

En utilisant host:

$ cat my_ips | xargs -i host {} 
1.1.1.1.in-addr.arpa domain name pointer myhost1.mydomain.com. 
1.1.1.2.in-addr.arpa domain name pointer myhost2.mydomain.com. 

En utilisant :

$ cat my_ips | xargs -i dig -x {} +short 
myhost1.mydomain.com. 
myhost2.mydomain.com. 

Notez que l'option -i à xargs implique l'option -L 1.

Pour obtenir d'abord les adresses IP de l'hôte, voir this answer.

Questions connexes