-1

可能重复:
我需要从文件 shell 脚本中获取子字符串

我需要一些关于这个 shell 脚本的帮助。我有一个变量,代表一个 IP/TCP 标头。我需要按所选标头过滤流量捕获。

> var=ttl 128 (only TTL=128)
> 
> tcpdump -Xvv -n -i eth0 -c 300 > capture.txt 2>/dev/null
> 

我正在尝试使用 grep 命令,但只有 ttl 128 行,不要 ip 源和目标

> grep -i "$var" capture.txt > resultGrep.txt

tcpdump 命令的结果是这样的

15:29:18.164566 IP (tos 0x0, ttl 1, id 2394, offset 0, flags [none], proto UDP (17), length 125)
    10.0.0.155.58363 > 239.255.255.254.1900: UDP, length 97
    0x0000:  4600 0024 0000 0000 0102 3ad3 0a00 0000  F..$......:.....
    0x0010:  e000 0001 9404 0000 1101 ebfe 0000 0000  ................
    0x0020:  0300 0000 0000 0000 0000 0000 0000       ..............
15:29:18.164566 IP (tos 0x0, ttl 128, id 2394, offset 0, flags [none], proto UDP (17), length 125)
    10.0.0.131.58363 > 239.255.255.250.1900: UDP, length 97
    0x0000:  4600 0024 0000 0000 0102 3ad3 0a00 0000  F..$......:.....
    0x0010:  e000 0001 9404 0000 1101 ebfe 0000 0000  ................
    0x0020:  0300 0000 0000 0000 0000 0000 0000       ..............
15:29:18.164566 IP (tos 0x0, ttl 64, id 2394, offset 0, flags [none], proto UDP (17), length 125)
    10.0.0.147.58363 > 239.255.255.255.1900: UDP, length 97
    0x0000:  4600 0024 0000 0000 0102 3ad3 0a00 0000  F..$......:.....
    0x0010:  e000 0001 9404 0000 1101 ebfe 0000 0000  ................
    0x0020:  0300 0000 0000 0000 0000 0000 0000       ..............

我需要从带有 ttl 128 标头的数据包中获取 IP 地址源和 IP 地址目标,在示例中,输出结果必须是

10.0.0.131.58363 > 239.255.255.250.1900

4

1 回答 1

0

如果您grep支持显示上下文-A,您可以尝试

grep -A 1 -e 'ttl 128' capture.txt | grep '^    ' | cut -d: -f1

第一个 grep 显示所有行,ttl 128后面加一个行。第二个 grep 过滤以空格开头的行。finalcut选择第一个之前的所有内容:

于 2013-01-14T21:39:29.113 回答