需要从 tcpdump 输出中提取中间的十六进制部分

发布于 2024-12-18 12:02:47 字数 1149 浏览 3 评论 0原文

这是捕获的数据包的 tcpdump 十六进制输出。

使用的命令是..

$ 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                      ........

这些...可以是任何它们是与指定的十六进制字符相对应的各自的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 ,但这给出了奇怪的输出。

如果可能的话建议使用 awk NRNF 。我是 awk 的新手,所以对它们不太了解。

我尝试了这个并得到这些 ... 作为输出。

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

输出:

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

有没有办法使用 awk 打印除最后一列之外的所有列(即打印除上述指定之外的所有列)。

Here is a tcpdump hex output of a captured packet.

Command used was ..

$ 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                      ........

these ... could be anything they are respective ascii charaters corresponding to the specified hex characters. I need to extract the middle hex portion.

I need output in the following format. Please suggest me something on this.

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

I tried this one but that seems incorrect ..

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

tried something with cut -b also but that is giving weird output.

If possible suggest something with awk NRand NF. I am new to awk so do not know much about them.

I tried this and get those ... as output.

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

output :

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

Is there any way using awk to print all the columns except the last one (that is to print everything except the above specified).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

寻梦旅人 2024-12-25 12:02:47

按空格剪切:cut -d " " -f 3-10

Cut by spaces: cut -d " " -f 3-10

月依秋水 2024-12-25 12:02:47

您可以尝试使用 grep 作为:

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

查看

You can try using grep as:

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

See it

没企图 2024-12-25 12:02:47

您的 AWK 解决方案 - awk '{for(i=2;i<=9;i++) printf $i" ";printf "\n"}' 文件 | 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  

Your AWK Solution - 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 

Another way of printing via 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  
垂暮老矣 2024-12-25 12:02:47

这可能适合您:

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

或者如果您想删除尾随空格:

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

This might work for you:

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

or if you want to remove trailing spaces:

sed 's/.\{9\}\(.\{39\}\).*/\1/;s/\s*$//' file
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文