【问题标题】:get a substring from a file shell script从文件 shell 脚本中获取子字符串
【发布时间】:2012-12-28 20:24:39
【问题描述】:

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

> var=ttl 128
> 
> tcpdump -Xvv -n -i eth0 -c 300 > capture.txt 2>/dev/null
> 
> 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       ..............

我需要有IP地址源和IP地址目的地,在示例中输出结果必须是

10.0.0.131.58363 > 239.255.255.250.1900

【问题讨论】:

    标签: linux shell grep


    【解决方案1】:

    我对这个问题的理解是,你想从你的 resultGrep.txt 中提取东西,而不是 capture.txt

    然后:

    grep -oP '[\d\.]*\s*>\s*[\d\.]*' resultGrep.txt
    

    看测试:

    kent$  echo "15:29:18.164566 IP (tos 0x0, ttl 1, id 2394, offset 0, flags [none], proto UDP (17), length 125)
    dquote>     10.0.0.131.58363 > 239.255.255.250.1900: UDP, length 97
    dquote>     0x0000:  4600 0024 0000 0000 0102 3ad3 0a00 0000  F..$......:.....
    dquote>     0x0010:  e000 0001 9404 0000 1101 ebfe 0000 0000  ................
    dquote>     0x0020:  0300 0000 0000 0000 0000 0000 0000       .............."|grep  -oP '[\d\.]*\s*>\s*[\d\.]*'
    10.0.0.131.58363 > 239.255.255.250.1900
    

    【讨论】:

      【解决方案2】:

      尝试直接在Unix pipe 中而不是tcpdump 中执行此操作:

      tcpdump -Xvv -n -i eth0 -c 300 |
      grep -oP "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,5}\s+>\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,5}"
      

      这是坚如磐石;)

      【讨论】:

      • 这是伟大的 sputnick,但我需要过滤 ttl 128 之前。你懂我吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多