2

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 }')

}

皆さんありがとう

4

4 に答える 4

0

これを試して:

netstat -naputeo | awk '{ if (($3 + 0) >= 4000) { sub(/.*:/, "", $4); print $3, $4, $9;} }'

これにより、ヘッダー行が除外され、フィールド $4 からポート番号が抽出されます。

于 2013-09-11T12:31:32.733 に答える
0

純粋な bash ソリューション:

#!/bin/bash

filterHuge() {
    while read -r -a line; do
        if (( line[2] > 4000 )) && [[ ${line[3]##*:} == '22' ]]; then # if Send-Q is higher than 4000 and port number is 22
            echo "Size: ${line[2]} Whole line: ${line[@]}"
        fi
    done
}

netstat -naputeo | filterHuge
于 2013-09-11T15:16:10.427 に答える