이것
/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
수행 중인 마지막 두 호출을 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
삭제할 각 항목에 대해 명령( 하나만 제외 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