ネットワーク接続やコマンドでフィルタリングできる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)
これは、システムと積極的に対話する接続であるため、オープン接続に焦点を当てています。