「フルI / O接続認識」 - スクリプト?

「フルI / O接続認識」 - スクリプト?

ネットワーク接続やコマンドでフィルタリングできるbash(またはおそらくPerl;それはずっと前の仕事であり、あるセットの象形文字を他のセットと区別するのに十分なbashを知らない)を見つけたらlsofファイルps -auxを開くでしょう。定期的にドメイン名解決を更新してください。オープン接続、オープン接続、クローズ接続の良い概要をお勧めします。誰かのブログからコピーしましたが、その人が直接書いたようですが、一部公開非商用ライセンスに基づいて公開されたため、直接コピーしてただ流布しただけです。

あなたはこのスクリプトに触れたかもしれませんし、AnsatzがBashで同様のことを書いたことをご存知でしたか?

心から、フォンSpotz

答え1

これはあなたの要件を満たすことができます。

#!/bin/sh

BASE=`basename "${0}" ".sh" `
TMP="/tmp/tmp.$$.${BASE}"

sudo lsof -Pni | grep '(ESTABLISHED)' >"${TMP}.connections"
#COMMAND     PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
#firefox    2713      username   88u  IPv4 445702      0t0  TCP 192.168.0.10:42564->142.251.41.4:443 (ESTABLISHED)
#firefox    2713      username   94u  IPv4 445943      0t0  TCP 192.168.0.10:50416->108.138.106.67:443 (ESTABLISHED)
#firefox    2713      username  119u  IPv4  44675      0t0  TCP 192.168.0.10:49430->104.16.249.249:443 (ESTABLISHED)
#firefox    2713      username  158u  IPv4 285032      0t0  TCP 192.168.0.10:57148->198.252.206.25:443 (ESTABLISHED)
#firefox    2713      username  256u  IPv4 446322      0t0  TCP 192.168.0.10:53810->20.127.253.7:443 (ESTABLISHED)"

sudo lsof -Pi | grep '(ESTABLISHED)' >"${TMP}.connections"
#COMMAND     PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
#firefox   2317      username   80u  IPv4  41156      0t0  TCP 192.168.0.10:37300->ec2-44-228-207-167.us-west-2.compute.amazonaws.com:443 (ESTABLISHED)
#firefox   2317      username   82u  IPv4 244978      0t0  TCP 192.168.0.10:50412->239.237.117.34.bc.googleusercontent.com:443 (ESTABLISHED)
#firefox   2317      username  128u  IPv4 173831      0t0  TCP 192.168.0.10:42774->stackoverflow.com:443 (ESTABLISHED)
#firefox   2317      username  129u  IPv4  41121      0t0  TCP 192.168.0.10:47274->104.16.248.249:443 (ESTABLISHED)
#firefox   2317      username  136u  IPv4  48202      0t0  TCP 192.168.0.10:35086->stackoverflow.com:443 (ESTABLISHED)


cat "${TMP}.connections" |
awk '{
    #printf("/proc/%s/fd/1|%s|%s|%s\n", $2, $4, $9, $10 ) ;
    printf("/proc/%s/mountinfo|%s|%s|%s\n", $2, $4, $9, $10 ) ;
}' |
while [ true ]
do
    read line
    if [ -z "${line}" ] ; then exit 0 ; fi

    procpath=`echo "${line}" | awk -F \| '{ print $1 }' `
          fd=`echo "${line}" | awk -F \| '{ print $2 }' `
        conn=`echo "${line}" | awk -F \| '{ print $3 }' `
      status=`echo "${line}" | awk -F \| '{ print $4 }' `

    age=`stat "${procpath}" | grep '^Change' | awk '{ p=index( $3, "." ) ; time=substr( $3, 1, p-1 ) ; print $2, time ; }' `

    dat=`awk -v FD="${fd}" '{ if( $4 == FD ){ print $0 ; exit } ; }' "${TMP}.connections" `

    echo "${age}  ${dat}"
done

出力は次のとおりです。

2022-09-22 23:06:32  firefox   2317      username   80u  IPv4  41156      0t0  TCP 192.168.0.10:37300->ec2-44-228-207-167.us-west-2.compute.amazonaws.com:443 (ESTABLISHED)
2022-09-22 23:06:32  firefox   2317      username   82u  IPv4 244978      0t0  TCP 192.168.0.10:50412->239.237.117.34.bc.googleusercontent.com:443 (ESTABLISHED)
2022-09-22 23:06:32  firefox   2317      username  128u  IPv4 173831      0t0  TCP 192.168.0.10:42774->stackoverflow.com:443 (ESTABLISHED)
2022-09-22 23:06:32  firefox   2317      username  129u  IPv4  41121      0t0  TCP 192.168.0.10:47274->104.16.248.249:443 (ESTABLISHED)
2022-09-22 23:06:32  firefox   2317      username  136u  IPv4  48202      0t0  TCP 192.168.0.10:35086->stackoverflow.com:443 (ESTABLISHED)

これは、システムと積極的に対話する接続であるため、オープン接続に焦点を当てています。

関連情報