我正在尝试编写一个“脏”网站过滤器 - 例如用户想要访问色情网站(基于域名)
基本上,我有类似
的东西#!/bin/bash
sudo tshark -i any tcp port 80 or tcp port 443 -V | grep "Host.*keyword"
它很好但现在我需要在找到某些东西后做一些操作(iptables和DROPing数据包...)。我得到的问题是tcp转储仍在运行。如果我有一个包含数据的完整文件,那么我想要达到的目标很容易解决。
在pseudocoude中,我希望有类似的东西:
if (tshark and grep found something)
iptables - drop packets
sleep 600 # a punishment for an user
iptables accept packets I was dropping
else
still look for a match in the tcp dump that's still running
感谢您的帮助。
答案 0 :(得分:3)
也许您可以尝试以下内容:
tshark OPTIONS 2>&1 | grep --line-buffered PATTERN | while read line; do
# actions for when the pattern is found, the matched input is in $line
break
done
2>&1
非常重要,这样当PATTERN匹配且while循环终止时,由于管道损坏,tshark
无处可写并终止。
如果您希望tshark
继续运行并分析未来的输出,只需删除break
即可。这样,while循环永远不会终止,并且它会继续从tshark
读取过滤后的输出。