netstat -naputeo からの出力は次のとおりです。
tcp 0 0 :::44500 :::* LISTEN 2000 773788772 18117/java off (0.00/0/0)
tcp 0 0 :::22 :::* LISTEN 0 9419 4186/sshd off (0.00/0/0)
tcp 0 0 ::ffff:127.0.0.1:61666 ::ffff:127.0.0.1:43940 ESTABLISHED 2000 788032760 18122/java off (0.00/0/0)
tcp 0 0 ::ffff:192.168.1.202:56510 ::ffff:192.168.1.202:3000 ESTABLISHED 0 791652028 6804/java_ndsagent keepalive (7185.05/0/0)
tcp 0 0 ::ffff:192.168.1.202:56509 ::ffff:192.168.1.202:3000 TIME_WAIT 0 0 - timewait (41.13/0/0)
tcp 0 0 ::ffff:192.168.1.202:56508 ::ffff:192.168.1.202:3000 TIME_WAIT 0 0 - timewait (21.13/0/0)
tcp 0 4656 ::ffff:192.168.1.202:22 ::ffff:84.208.36.125:48507 ESTABLISHED 0 791474860 24141/1 on (0.19/0/0)
tcp 0 0 ::ffff:127.0.0.1:61616 ::ffff:127.0.0.1:45121 ESTABLISHED 2000 788032761 18117/java off (0.00/0/0)
tcp 0 0 ::ffff:192.168.1.202:3000 ::ffff:192.168.1.202:56510 ESTABLISHED 0 791651217 8044/rmiregistry off (0.00/0/0)
Send-Q は 3 番目のフィールドで、攻撃者はポート 22 と 4656KB です。問題は、その特定の行とその番号/ポート/プロセスを出力ファイルに出力する必要があることです[4000を超える場合のみ、受信トレイに送信されて警告されます.
同様の回答を見たことがありますが、これらの提案を使用して行を抽出できません。どのプロセスが Q を満たすかはわかりませんが、ポートは知っています。それは 22 だけでなく、いつでもそれ以上になる可能性があります。
私は試した:
netstat -naputeo | awk '$3 == 0 && $4 ~ /[^0-9]22$/'
しかし、それは私に間違った線を与えます。[それは:::22]
netstat -naputeo | awk '{if(($3)>0) print $3;}'
どういうわけかそのフィールドのすべての行を生成するため、それはすべて間違っています。
私が必要とするのは、csv に送信されたその番号と行だけです。後でエラー チェックを処理して、改善することもできます。
助言がありますか??
これを使用して、今のところ機能しましたが、改善の余地があります
filterQs() {
while read recv send address pid_program; do
ip=${address%%:*}
port=${address##*:}
pid=${pid_program%%/*}
program=${pid_program#*/}
echo "recv=${recv} send=${send} ip=${ip} port=${port} pid=${pid} program=${program}"
if [[ ${port} -eq 35487|| ${port} -eq 65485|| ${port} -eq CalorisPort || ${port} -eq 22 ]]
then
echo "recv=${recv} send=${send} ip=${ip} port=${port} pid=${pid} program=${program}" >> Qmonitor.txt
fi
done < <(netstat -napute 2>/dev/null | awk '$1 ~ /^(tcp|udp)/ && ($2 > 500 || $3 > 500) { print $2, $3, $4, $9 }')
}
皆さんありがとう