1

我是 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吗?

4

2 回答 2

2

像下面这样的东西应该可以工作:

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

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

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

于 2012-09-18T17:22:25.110 回答
0

嗨,

使用 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标志中,(?<=XXXX)是一个反向引用,不会被正则表达式捕获。它只是说我们希望我们的模式以 XXXX 开头。当然,您必须在要捕获的模式之前编写它。

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

希望这会有所帮助

于 2012-09-18T20:56:42.653 回答