Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題157

問題157 pingのパケット解析

tcpdumpというコマンドを使うようだったが、ググってもマニュアルを検索してもなんだか使い方がよくわからなかったので結局解けなかった。いつも通り解答例と気になったことを載せておく。

解答例は

小問1 sudo tcpdump -x -c 1 icmp 2>/dev/null
小問2 sudo tcpdump -x -c 1 icmp 2>/dev/null | grep $'\t' | sed 's/.*://' | xargs | sed -r 's/^.*0800 (.{4} ){3}//'

となる。小問1はtcpdumpでicmpと指定することでそのパケットのみを監視するようになる。2>というのは標準エラー出力を表しており、これで/dev/nullへエラーを捨てている。小問2では同じコマンドに加えて、grep でパケットの中身が書かれた行を抜き出している。そのあとsedで行番号だったか(名前が思い出せない)を削除してxargsで一行にまとめている。0800に関しては解説を読んでもわからなかった。余分なものを削りたいのだろうが、それだったら0800よりも前になりそうなものだが。実際、解説では0800の前にあるのはIPヘッダだといっており、今回ほしいデータの中身ではない。