ablog

不器用で落着きのない技術者のメモ

Linux でプロセスが通信しているIPアドレスとポートを調べてみた

PHPで書かれたWebアプリのDB接続先を設定した後に、本当に設定したホストに接続されてるんかいなと思ってちょっと調べてみた。
netstat とかでだいたいわかるけど、厳密にプロセスがどのホストと通信しているか調べてみた。


httpd プロセスの PID を調べる。

# ps -ef|grep [h]ttpd
root       650     1  0  2009 ?        00:15:39 /usr/local/apache/bin/httpd
root     29147     1  0  2009 ?        00:07:42 /usr/local/apache2/bin/httpd -k start
httpd    25157   650  0 May24 ?        00:00:33 /usr/local/apache/bin/httpd
httpd    24441 29147  0 May27 ?        00:00:35 /usr/local/apache2/bin/httpd -k start
httpd    25199 29147  0 May27 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd    25479 29147  0 May27 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd    10800   650  0 May29 ?        00:00:30 /usr/local/apache/bin/httpd
httpd    15550   650  0 Jun01 ?        00:00:30 /usr/local/apache/bin/httpd
httpd     4987 29147  0 Jun03 ?        00:00:02 /usr/local/apache2/bin/httpd -k start
httpd    16948 29147  0 Jun03 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd    22539 29147  0 Jun03 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd    25499 29147  0 Jun03 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd    25639 29147  0 Jun03 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd    27384 29147  0 Jun03 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd    29190 29147  0 Jun03 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd    31901 29147  0 Jun03 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd      915 29147  0 Jun03 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd     3550 29147  0 00:25 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
httpd     3851   650  0 00:28 ?        00:00:00 /usr/local/apache/bin/httpd
httpd     3853   650  0 00:29 ?        00:00:00 /usr/local/apache/bin/httpd
httpd     3881   650  0 00:29 ?        00:00:00 /usr/local/apache/bin/httpd
httpd     3883   650  0 00:29 ?        00:00:00 /usr/local/apache/bin/httpd
httpd     3884   650  0 00:29 ?        00:00:00 /usr/local/apache/bin/httpd

PID が 25157 のプロセスがオープンしているソケットを調べる。

# ls -l /proc/25157/fd|grep [s]ocket
lrwx------    1 root     root           64 Jun  4 00:33 20 -> socket:[1207]
lrwx------    1 root     root           64 Jun  4 00:33 4 -> socket:[1583865686]
lrwx------    1 root     root           64 Jun  4 00:33 47 -> socket:[1583892575]

inode番号 1583892575 が通信しているリモートホストIPアドレスとポート番号を調べる。

# perl -lane 'print $F[2] if($F[9]==1583892575)' /proc/net/tcp
CB031DAC:05F1

IPアドレスを10進数に変換する。

# perl -le 'print join(q/./, map{hex} reverse unpack(qq/A2A2A2A2/,q/CB031DAC/))'
172.29.3.203

ポート番号を10進数に変換する。

# perl -le 'print hex q/05F1/'
1521