1

以下は、キャプチャされたパケットの tcpdump 16 進出力です。

使用したコマンドは ..

$ tcpdump -X -s0 protochain <portno> 

0x0000:  6000 0000 0080 3220 0000 0000 0000 0000  ................
0x0040:  0000 0000 0000 0001 0000 0000 0000 0000  ................
0x0090:  6174 6500 0000 0329                      ........

これら...は、指定された 16 進文字に対応するそれぞれの ASCII 文字であれば何でもかまいません。中央の六角部分を抽出する必要があります。

次の形式で出力する必要があります。これについて何か提案してください。

6000 0000 0080 3220 0000 0000 0000 0000
0000 0000 0000 0001 0000 0000 0000 0000
6174 6500 0000 0329 

私はこれを試しましたが、それは間違っているようです..

cut -d ":" -f2 tmp_packet.txt | awk -F " " '{printf "%s %s %s %s %s %s %s %s 
\n",$1,$2,$3,$4,$5,$6,$7,$8}' > packet.txt

また、何かを試してみましcut -bたが、それは奇妙な出力を出しています。

可能であれば、 awkNRNF. 私はawkを初めて使用するので、それらについてあまり知りません。

私はこれを試し、それら...を出力として取得しました。

cut -d ":" -f2 tmp_packet.txt | awk -F " " '{printf "%s\n",$NF}' > packet.txt

出力:

................
................
........

awk を使用して、最後の列を除くすべての列を印刷する方法はありますか (つまり、上記で指定したものを除くすべてを印刷することです)。

4

4 に答える 4

2

次のように grep を使用してみてください。

egrep -o '([0-9]{4} ){1,8}'  input

見る

于 2011-11-26T10:49:20.923 に答える
1

スペースでカット:cut -d " " -f 3-10

于 2011-11-26T10:39:54.863 に答える
0

あなたのAWKソリューション-awk '{for(i=2;i<=9;i++) printf $i" ";printf "\n"}' file | sed 's/\.*//g'

[jaypal~/Temp]$ cat file
0x0000:  6000 0000 0080 3220 0000 0000 0000 0000  ................
0x0040:  0000 0000 0000 0001 0000 0000 0000 0000  ................
0x0090:  6174 6500 0000 0329                      ........

[jaypal~/Temp]$ awk '{for(i=2;i<=9;i++) printf $i" ";printf "\n"}' file | sed 's/\.*//g'
6000 0000 0080 3220 0000 0000 0000 0000 
0000 0000 0000 0001 0000 0000 0000 0000 
6174 6500 0000 0329 

AWKを介して印刷する別の方法-

[jaypal~/Temp]$ awk '{$1="";$10=""; print}' file | sed 's/\.*//g'
 6000 0000 0080 3220 0000 0000 0000 0000 
 0000 0000 0000 0001 0000 0000 0000 0000 
 6174 6500 0000 0329  
于 2011-11-26T10:55:19.390 に答える
0

これはあなたのために働くかもしれません:

sed 's/.\{9\}\(.\{39\}\).*/\1/' file

または、末尾のスペースを削除する場合:

sed 's/.\{9\}\(.\{39\}\).*/\1/;s/\s*$//' file
于 2011-11-26T19:45:52.177 に答える