これ
/usr/sbin/conntrack -L |grep $1 | grep ESTAB |grep 'dport=80' | awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80");}"
この出力を提供します
awk: cmd. line:2: {system(/usr/sbin/conntrack awk: cmd. line:2: ^ unexpected newline or end of string
これをデバッグする必要があります。
答え1
あなたのawk
スクリプト:
awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80")}"
このスクリプトには引用の問題があります。
スクリプトは二重引用符で囲まれており、二重引用符も使用されます。内部二重引用符が原因で問題が発生する可能性があります。
解決策はスクリプトを一重引用符で囲むことです(シェルが解釈されないように、スクリプトはawk
常に一重引用符で囲む必要があります)。$0
awk '{system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'
grep
実行中の最後の2つの呼び出しをスクリプトにawk
簡単に移動することもできます。
awk '/ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80");}'
もう少し努力すれば、最初のものも手に入ります。
awk -v arg1="$1" 'match($0, arg1) && /ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'
答え2
$1
ソースIPアドレス(スクリプトの最初のパラメータ)、元の宛先ポート80、およびstatusのconntrack TCPエントリを削除する場合は、次のようにしますESTABLISHED
。
conntrack -D -s "$1" -p tcp --dport 80 --state ESTABLISHED
すでに述べた問題に加えて、あなたの方法はdport=8080
行を、またはdport=80
次のように一致させます。返信する目的地。 inはスクリプトの最初の引数ではなく、拡張された行の最初のフィールドになります$1
。また、正規表現演算子として(を使用してもすべての文字と一致しますが、そうではありません)。"--orig-src " $1
awk
grep 10.1.1.4
10.1.1.40
10.101.4.5
grep -w
.
言葉特徴)。
アイテムを直接フィルタリングできない場合は、次のことをお勧めしますconntrack
。
conntrack -L | SRC=$1 awk '
$1 == "tcp" && \
$4 == "ESTABLISHED" && \
$5 == "src=" ENVIRON["SRC"] && \
$8 == "dport=80" {
dst = substr($6, 5)
sport = substr($7, 7)
system("conntrack -D -s \"$SRC\" -d "dst" --dport 80 --sport "sport)
}'
または、sh
削除する各項目に対してコマンド(1つだけを除くconntrack
)を実行しないでください。
conntrack -L | SRC=$1 awk '
$1 == "tcp" && \
$4 == "ESTABLISHED" && \
$5 == "src=" ENVIRON["SRC"] && \
$8 == "dport=80" {
dst = substr($6, 5)
sport = substr($7, 7)
print "conntrack -D -s \"$SRC\" -d "dst" --dport 80 --sport "sport
}' | sh