tcpdump: Sortie uniquement les adresses source et de destination
Description du problème:
Je veux imprimer seulement les adresses source et de destination à partir d'un tcpdump[1].
Avoir une solution de travail, mais nous croyons qu'il pourrait être beaucoup améliorée. Un exemple qui capture 5 paquets, un peu comme un exemple de ce que je suis à la recherche de:
tcpdump -i eth1 -n -c 5 ip | \
cut -d" " -f3,5 | \
sed -e 's/^\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\..* \([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*$/ > /'
Question:
Cela peut être fait dans n'importe quel moyen plus facile? La Performance est également un problème ici.
[1] Une partie d'un test si le snort home_net est correctement définie, ou si le trafic n'est défini dans la home_net.
Solution:
Ok, merci à tous ceux qui ont répondu à celui-ci. Il y a eu deux préoccupations liées à la les réponses, est la compatibilité entre les différents linux versions et la seconde est la vitesse.
Voici les résultats sur la vitesse de test que j'ai fait. D'abord la commande grep-version:
time tcpdump -l -r test.dmp -n ip 2>/dev/null | grep -P -o '([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*? > ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)' | grep -P -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | xargs -n 2 echo >/dev/null
real 0m5.625s
user 0m0.513s
sys 0m4.305s
Puis le sed-version:
time tcpdump -n -r test.dmp ip | sed -une 's/^.* \(\([0-9]\{1,3\}\.\?\)\{4\}\)\..* \(\([0-9]\{1,3\}\.\?\)\{4\}\)\..*$/ > /p' >/dev/null
reading from file test.dmp, link-type EN10MB (Ethernet)
real 0m0.491s
user 0m0.496s
sys 0m0.020s
Et le plus rapide, le awk-version:
time tcpdump -l -r test.dmp -n ip | awk '{ print gensub(/(.*)\..*/,"\","g",$3), $4, gensub(/(.*)\..*/,"\","g",$5) }' >/dev/null
reading from file test.dmp, link-type EN10MB (Ethernet)
real 0m0.093s
user 0m0.111s
sys 0m0.013s
Je n'ai malheureusement pas été en mesure de tester la façon dont ils sont compatibles, mais le awk besoins gnu awk de travailler en raison de la gensub fonction. De toute façon, tous les trois solutions fonctionne sur les deux plates-formes que j'ai testé. 🙂
OriginalL'auteur Eigir | 2012-11-21
Vous devez vous connecter pour publier un commentaire.
Voici un moyen à l'aide de
GNU awk
:J'avais rencontré de problème lors de l'utilisation gensub sur centos. regex contenant {} m'a donné beaucoup de mal pour moi...
concernant la vitesse: si vous voulez capturer seulement 5 paquets, puis la vitesse ne devrait pas déranger beaucoup. Je veux dire, le principal goulot d'étranglement serait tcpdump, plutôt que de sed. Essayez de dumping tcpdump la sortie vers un fichier & puis en exécutant awk vs sed.
Oui, je ne pense pas que d'autres
awk
's, commeBSD/OSX awk
etc, le soutien de lagensub()
fonction, malheureusement.Vitesse: 5 paquets de prescription est juste pour tester la commande. La vitesse d'essai a été fait sur environ 100k paquets (lire à partir d'un fichier pcap). 🙂
OriginalL'auteur Steve
Essayez ceci:
Si en cours d'exécution à partir d'un .sh script, n'oubliez pas d'échapper \1 & \2 tel que requis.
avec
-r
vous ne nécessiterait pas` before { & }, I think... but
{1,3}` est plus la restriction de/précis.OriginalL'auteur anishsane
Avertissement Vous devez utiliser sans tampon ou ligne de tampon sortie de surveiller la sortie d'une autre commande comme
tcpdump
.Mais vous commande semble correct.
Pour simplifier, vous pouvez:
Avis de la
u
commutateur utile sans-c 5
à tcpdumpOriginalL'auteur F. Hauri
& ici est un grep seule solution:
Note
-l
, dans le cas où vous ne souhaitez pas limiter le nombre de paquets à l'aide-c
.Tcpdump utilise
getopt()
, pasgetopt_long()
, donc il n'a pas d'options telles que--line-buffered
. t ont un-l
option, qui est (en effet) de la ligne de tampon (c'est en fait "flush à la fin de chaque paquet"; cela a été fait parce que, sur Windows, la ligne "tamponnée" I/O standard écrit un caractère à la fois).^^ désolé, oui, vous avez raison.
--line-buffered
est grep option.J'aime le grep version. Vérifier la compatibilité de il est, et de faire un petit test de vitesse contre le awk et sed solutions. Le-c 5 est seulement de limiter le nombre de paquets lors de l'essai de la ligne de commande. 🙂
J'ai pensé, grep doit être rapide, seulement parce que c'est probablement la lumière-poids par rapport à la awk/sed. mais 2*grep peut être coûteuse. Laissez-moi savoir la perf résultat 🙂 la Compatibilité des sage: je l'ai testé, wirks bien.
OriginalL'auteur anishsane