クライアントを使用してSSHを介してリバーストンネルを作成し、-R
netstatを実行すると、サーバーに次の出力が表示されます。
default@debian:~$ sudo netstat -pln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 801/sshd
tcp 0 0 127.0.0.1:39963 0.0.0.0:* LISTEN 1074/sshd: anonymou
tcp6 0 0 :::22 :::* LISTEN 801/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 451/dhclient
ポートでリスニングソケットを作成したクライアントのIPが何であるかを知りたいです39963
。
バインディングのIP:PORTだけでなく、トンネルを生成したクライアントのIPも取得するには、どのコマンドを実行できますか?
ベストアンサー1
コマンドを発行することはできませんが、クライアントを見つけるためのいくつかのコマンドがあります。問題は、OpenSSHがプロセスを生成する方法にあります。リスニングソケットを所有するプロセスは、39963
SSH接続を所有するプロセスの子です。したがって、異なるPIDを持つことになります。あなたの例では、親プロセスを見つける必要があります1074
。以下は、UbuntuのOpenSSHサーバーに適用されます。 すべてのディストリビューションが同じように機能することを保証することはできません。
まず、クライアント接続のPIDを見つけます。grep
フィルタリングされた出力に使用されますnetstat
。
$ sudo netstat -ptln | grep 39963
tcp 0 0 127.0.0.1:39963 0.0.0.0:* LISTEN 21921/sshd: philip@
tcp6 0 0 ::1:39963 :::* LISTEN 21921/sshd: philip@
ここで監視プロセスは次のとおりです21921
。親が必要です。
$ ps -ef | grep 21921
philip 21921 21919 0 11:01 ? 00:00:00 sshd: philip@pts/1
philip 21924 21921 0 11:01 pts/1 00:00:00 -bash
philip 22844 20309 0 11:15 pts/0 00:00:00 grep --color=auto 21921
# Or try this:
$ ps -ef | awk '$2 == 21921 { print $3 }'
21919
ここの親21921
はです21919
。それでは、クライアントを見つけるためにnetstatをもう一度見てみましょう。
$ sudo netstat -ptn | grep 21919
tcp 0 0 192.168.1.36:22 192.168.1.10:54425 ESTABLISHED 21919/sshd: philip
これはリモートIPです192.168.1.10