프로세스(PID)에 의해 시작된 연결을 얻는 방법

프로세스(PID)에 의해 시작된 연결을 얻는 방법

예를 들어 tomcat(PID는 4739) 은 클라이언트 ()로부터 요청이 수신되었기 postgress때문에 데이터베이스에서 데이터를 검색하기 위해 (다른 서버)에 대한 연결을 시작합니다 . 여기서는 임의의 TCP를 사용하여 연결합니다 . 이제 tomcat으로 생성된 이러한 콘텐츠를 얻을 수 있는 방법이 있습니까 ?tomcatcurl 192.168.1.12:8088/gettomcatsource portpostgresssource portsPID

사용했는데 연결이 netstat -tp안되네요 PID. PID내가 사용한 것에서 만 l - Listening좋아요를 받았습니다 netstat -tlp. PID소켓에서 읽은 /proc/PID/fd다음 에 연결하려고 시도했지만 /proc/net/tcp아무 것도 표시되지 않았습니다 /proc/net/tcp.

노트:토폴로지는 다음과 같습니다.

My requests(server1)<---------> tomcat(server2)<--------->postgress(server2)

업데이트 1 netstat -tepn산출

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp6       0      1 172.25.30.21:36598      xx.xx.xx.91:4343     SYN_SENT    0          42955126    9661/java
tcp6       0      0 172.25.30.21:38340      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38064      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38282      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37520      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38286      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37654      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37906      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38152      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38124      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37412      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37374      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38126      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38252      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37224      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37800      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37780      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38274      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37244      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37880      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38230      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38118      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37496      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:1099       172.25.30.21:47496      ESTABLISHED 0          42954824    4738/java
tcp6       0      0 172.25.30.21:37474      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38200      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38102      172.25.30.12:5432       TIME_WAIT   0          0           -

PID grep출력 편집

veeru@localhost:~/veeru# netstat -tepn | grep 4738
tcp6       0      0 127.0.1.1:41095         127.0.0.1:45180         ESTABLISHED 0          42960213    4738/java       
tcp6       0      0 172.25.30.21:1099       172.25.30.21:49984      ESTABLISHED 0          42963153    4738/java 

답변1

netstat -tep | grep <pid of server2>

그러면 postgress에 연결할 때 server2가 사용하는 소스 포트가 제공됩니다.

답변2

리눅스에서

  • netstat -atp
  • ss -atp
  • lsof -i tcp

TCP 소켓 목록과 netcatfd가 열려 있는 프로세스의 pid(및 그 이외의 fd)를 제공합니다(자신에게 속하지 않은 프로세스에 대한 정보를 얻으려면 수퍼유저 권한이 필요합니다). 그들은 공개 FD를 가지고 있습니다.

프로세스가 fd-소켓 연결 또는 shutdown() 연결을 닫은 후에는 쓰기 방향에서만이라도 더 이상 이 정보를 얻을 수 없습니다. 또는 의 출력에서 ​​일부 상태의 소켓을 계속 TIME_WAIT볼 수 있지만 내가 아는 한 파일 설명자를 사용하여 프로세스로 돌아갈 수 있는 방법은 없습니다.netstatss

이 경우 가장 좋은 옵션은 auditctl감사 로그 connect()시스템 호출 등을 사용하여 발생하는 모든 TCP 연결을 기록하는 것입니다.

관련 정보