【问题标题】:Bash Grep and SendBash grep 和发送
【发布时间】:2012-09-18 17:09:32
【问题描述】:

我是 bash 新手,正在努力学习如何解决。

我有以下几点:

Sep 18 21:05:40 host kernel: Firewall: *Port Flood* IN=venet0 OUT= MAC= SRC=118.223.69.254 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=9398 PROTO=TCP SPT=9876 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0

如何将 SRC IP 拉出并将其通过管道传输到 csf -d {IP HERE}

我会使用类似的东西

sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/' /var/log/messages 对吗?

编辑:

既然SPT= 是全部名称,我可以提取它并获取IP 吗?

【问题讨论】:

  • 您的意思是 GREP 和 SED 吗?什么是“csf”?你用什么系统?
  • 是的,grep。 CSF 就像 IPTables。
  • 如果我有 | tail 在最后,那么它会监控文件对吗?
  • @mike.williams 您可能希望tail -f /var/log/messages | script 在匹配发生时持续查看日志,其中script 是 F.J. 提供的答案

标签: linux bash shell awk grep


【解决方案1】:

类似下面的东西应该可以工作:

sed -n 's/.*SRC=\([.0-9]*\).*/\1/p' /var/log/messages | xargs csf -d

xargs 会将标准输入中的参数附加到命令中。请注意,我的正则表达式在 IP 地址之前和之后将整行与 .* 匹配,因此当您进行替换时,剩下的就是 IP。

通过使用-n 选项并将p 添加到 sed 替换的末尾,只会打印与正则表达式匹配的行。

【讨论】:

  • 有没有办法让它通过文件查看?我似乎得到了一个条目;/
【解决方案2】:

喂,

使用 grep (GNU grep) 2.10,您可以使用 P 标志,用于 perl 兼容的正则表达式,i 标志用于不区分大小写的测试和 o 标志来显示结果。

在下面,我设置了一个有效 IP 的模式,然后 grep 文件

ippattern="\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b"
grep -Pio "(?<=src=)$ippattern" /var/log/messages

在 grep whit perl compatible -P 标志中,(?&lt;=XXXX) 是反向引用,不会被正则表达式捕获。它只是说我们希望我们的模式以 XXXX 开头。当然你必须在要捕获的模式之前编写它。

ippattern 是一个有效的 ip 地址。所有案例都被捕获。

希望对你有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多