- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我的问题输入文件,它包含不同类型的 n/w 数据包以及 header 信息。
这是一个仅包含两个数据包的示例文件......
18:10:17.528660 IP6 2001::100 > 2001::200: ESP(spi=0x00005fb4,seq=0x23),
length 168
0x0000: 6000 0000 00A8 3220 2001 0000 0000 0000 ................
0x0010: 0000 0000 0000 0100 2001 0000 0000 0000 ................
0x0020: 0000 0000 0000 0200 0000 5FB4 0000 0023 ................
0x0030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 5361 6C74 6564 5F5F 1267 6EE1 8FFD A625 ................
0x0070: 6DAB 0F22 B006 0809 505F CD62 4C4F FCC2 ................
0x0080: 0966 DD9A E1E8 F582 EF63 C8BF 5F08 3D46 ................
0x0090: 3033 3361 3666 6131 3430 3036 6163 3931 ................
0x00a0: 3365 6137 3936 3866 6133 6334 6434 3837 ................
0x00b0: 3037 6531 6534 3761 0A00 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
18:10:17.528660 IP6 2001::100 > 2001::200: ESP(spi=0x00005fb4,seq=0x23),
length 168
0x0000: 6000 0000 0070 3220 0000 0000 0000 0000 ................
0x0040: 0000 0000 0000 0001 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0002 0000 0270 0000 000D ................
0x0060: 5361 6C74 6564 5F5F 682A CB8F 97D9 10A2 ................
0x0070: 1D12 88CB EE21 9F00 42AF AFA4 C919 B1E6 ................
0x0080: 045A B5DF 93BE FA50 3231 3164 3939 6534 ................
0x0090: 3332 6563 3634 3737 6133 6265 3231 6161 ................
0x00a0: 3730 3866 6331 3636 3363 3933 6232 3264 ................
0x00b0: 0A00 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 ........
这些 ...
可以是任何它们各自对应于指定的十六进制字符的 ascii 字符。我只需要提取每个数据包的中间十六进制部分。
我需要以下格式的输出。
6000 0000 00A8 3220 2001 0000 0000 0000
0000 0000 0000 0100 2001 0000 0000 0000
0000 0000 0000 0200 0000 5FB4 0000 0023
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
5361 6C74 6564 5F5F 1267 6EE1 8FFD A625
6DAB 0F22 B006 0809 505F CD62 4C4F FCC2
0966 DD9A E1E8 F582 EF63 C8BF 5F08 3D46
3033 3361 3666 6131 3430 3036 6163 3931
3365 6137 3936 3866 6133 6334 6434 3837
3037 6531 6534 3761 0A00 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
例如,此处应生成两个文件,即 ipsec_packet1.txt 和 ipsec_packet2.txt,每个文件应仅由上述格式指定的中间十六进制部分组成。
这是我的脚本..
cat received_ipsec.txt | tr '[a-z]' '[A-Z]' > tmp_tcpdump.txt
count=`grep -w -c 0X0000 tmp_tcpdump.txt`
grep -w -n 0X0000 tmp_tcpdump.txt > tmp_samp.txt
i=1
cut -d ":" -f$i tmp_samp.txt | tr '\n' ' ' > tmp_try.txt
while [ $i -le $count ]
do
k=`expr $i + 1 `
prev_j=`cut -d " " -f$i tmp_try.txt`
next_j=`cut -d " " -f$k tmp_try.txt`
//这部分需要注意......
if [ $i -eq $count ]
then
awk -v prev_j=$prev_j '{if(NR>=prev_j)print $0}'
tmp_tcpdump.txt > tmp_packet.txt
// first trial failed so commented
# cut -d ":" -f2 tmp_packet.txt | sed 's/ *//' |
# cut -d " " -f1-8 > ipsec_packet$i.txt
// secone trial failde so commented
# cut -d " " -f 3-10 tmp_packet.txt > ipsec_packet$i.txt
// third one although it also not working properly but will
explain it below
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}' >ipsec_packet$i.txt
else
awk -v prev_j=$prev_j -v next_j=$next_j
'{if(NR>=prev_j && NR<next_j-1)print $0}' tmp_tcpdump.txt
> tmp_packet.txt
# cut -d ":" -f2 tmp_packet.txt | sed 's/ *//' |
# cut -d " " -f1-8 > ipsec_packet$i.txt
# cut -d " " -f 3-10 tmp_packet.txt > ipsec_packet$i.txt
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}' > ipsec_packet$i.txt
fi
i=`expr $i + 1 `
done
现在创建部分的问题是...
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}'
如果最后一行是这样的,那么就没有问题(如上面的数据包 1 所示)
0000 0000 0000 0000 0000 0000 0000 0000
但如果最后一行是这样的,那么就有问题了(如上面的数据包 2)
0000 0000 0000 0000
然后它将从虚线部分获取其他四个字段,如..
0000 0000 0000 0000 ....
可能我不需要所有这些来执行我的任务,但我是新手所以对这个 sed/awk
世界了解不多。
编辑:
这是 grep 样本之一的输出...我不知道为什么它是这种格式。这就是为什么我没有使用简单的 cut by column
逻辑
2: 0X0000: 6000 0000 00A8 3220 2001 0000 0000 0000
16: 0X0000: 6000 0000 0070 3220 0000 0000 0000 0000
27: 0X0000: 6000 0000 0080 3220 0000 0000 0000 0000
最佳答案
在你只 grep 相关行之后,就这样做
cut -d: -f2- | cut -c3-42
可能会出现差一错误,但您可以通过反复试验来修复这些错误。或者,您可以仅通过一个单独的 cut -c...
来完成,但您需要计算更多字符。
关于linux - 需要一个 awk/sed/cut 替代方案来解决 tcpdump 输出上看起来很简单的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8295843/
我正在努力实现以下目标, 假设我有字符串: ( z ) ( A ( z ) ( A ( z ) ( A ( z ) ( A ( z ) ( A ) ) ) ) ) 我想编写一个正则
给定: 1 2 3 4 5 6
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
大家好,我卡颂。 Svelte问世很久了,一直想写一篇好懂的原理分析文章,拖了这么久终于写了。 本文会围绕一张流程图和两个Demo讲解,正确的食用方式是用电脑打开本文,跟着流程图、Demo一
身份证为15位或者18位,15位的全为数字,18位的前17位为数字,最后一位为数字或者大写字母”X“。 与之匹配的正则表达式: ?
我们先来最简单的,网页的登录窗口; 不过开始之前,大家先下载jquery的插件 本人习惯用了vs2008来做网页了,先添加一个空白页 这是最简单的的做法。。。先在body里面插入 <
1、MySQL自带的压力测试工具 Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出
前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、简单、实用的数据库文档(字典)生成工具,该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等
Go语言语法类似于C语言,因此熟悉C语言及其派生语言( C++、 C#、Objective-C 等)的人都会迅速熟悉这门语言。 C语言的有些语法会让代码可读性降低甚至发生歧义。Go语言在C语言的
我正在使用快速将 mkv 转换为 mp4 ffmpeg 命令 ffmpeg -i test.mkv -vcodec copy -acodec copy new.mp4 但不适用于任何 mkv 文件,当
我想计算我的工作簿中的工作表数量,然后从总数中减去特定的工作表。我错过了什么?这给了我一个对象错误: wsCount = ThisWorkbook.Sheets.Count - ThisWorkboo
我有一个 perl 文件,用于查看文件夹中是否存在 ini。如果是,它会从中读取,如果不是,它会根据我为它制作的模板创建一个。 我在 ini 部分使用 Config::Simple。 我的问题是,如果
尝试让一个 ViewController 通过标准 Cocoa 通知与另一个 ViewController 进行通信。 编写了一个简单的测试用例。在我最初的 VC 中,我将以下内容添加到 viewDi
我正在绘制高程剖面图,显示沿路径的高程增益/损失,类似于下面的: Sample Elevation Profile with hand-placed labels http://img38.image
嗨,所以我需要做的是最终让 regStart 和 regPage 根据点击事件交替可见性,我不太担心编写 JavaScript 函数,但我根本无法让我的 regPage 首先隐藏。这是我的代码。请简单
我有一个非常简单的程序来测量一个函数花费了多少时间。 #include #include #include struct Foo { void addSample(uint64_t s)
我需要为 JavaScript 制作简单的 C# BitConverter。我做了一个简单的BitConverter class BitConverter{ constructor(){} GetBy
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我是 Simple.Data 的新手。但我很难找到如何进行“分组依据”。 我想要的是非常基本的。 表格看起来像: +________+ | cards | +________+ | id |
我现在正在开发一个 JS UDF,它看起来遵循编码。 通常情况下,由于循环计数为 2,Alert Msg 会出现两次。我想要的是即使循环计数为 3,Alert Msg 也只会出现一次。任何想法都
我是一名优秀的程序员,十分优秀!