![TCP 포트에서 수신 대기 중인 프로세스가 메시지를 받았는지 확인할 수 있는 방법이 있나요?](https://linux55.com/image/57525/TCP%20%ED%8F%AC%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%88%98%EC%8B%A0%20%EB%8C%80%EA%B8%B0%20%EC%A4%91%EC%9D%B8%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EA%B0%80%20%EB%A9%94%EC%8B%9C%EC%A7%80%EB%A5%BC%20%EB%B0%9B%EC%95%98%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
에 따르면 tcpdump
내 서버는 다음 TCP 패킷을 수신합니다.
12:52:29.603233 00:19:e2:9e:df:f0
00:16:3e:6a:25:3f, ethertype IPv4 (0x0800), length 74: 10.10.10.65.38869
192.168.215.82.22: Flags [S], seq 567054335, win 5840, options [mss 1460,sackOK,TS val 2096335479 ecr 0,nop,wscale 0], length 0
위에 표시된 대로 TCP 포트 22로 전송된 TCP SYN 패킷인데, 제 경우에는 이 TCP 패킷이 프로세스에 sshd
도달하는지 확인하고 싶습니다 . sshd
한 가지 옵션은 sshd
디버그 모드에서 재부팅하는 것입니다. 그러나 TCP 포트에서 수신 대기 중인 프로세스가 메시지를 수신하는지 확인하는 다른 영리한 도구/방법이 있습니까? TCP SYN 패킷의 경우 커널 TCP/IP 스택이 대신 TCP SYN+ACK를 보낼 것 같습니다 sshd
.
답변1
그러나 TCP 포트에서 수신 대기하는 프로세스가 메시지를 수신하는지 확인하는 다른 영리한 도구/방법이 있습니까?
strace
와 함께 사용할 수 있습니다 -e trace=network
. TCP 연결을 수락하고, HTTP 요청을 받고, HTTP 응답을 보내고, 연결을 닫을 때 인쇄되는 내용은 다음과 같습니다.
$ strace -v -f -e trace=network -p `cat logs/my_server.pid`
Process 2361 attached with 44 threads - interrupt to quit
[pid 2422] accept(11, {sa_family=AF_INET, sin_port=htons(56289), sin_addr=inet_addr("172.30.1.60")}, [16]) = 14
[pid 2422] getsockname(14, {sa_family=AF_INET, sin_port=htons(7754), sin_addr=inet_addr("172.30.1.60")}, [16]) = 0
[pid 2422] setsockopt(14, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 2422] setsockopt(14, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 2422] getsockopt(14, SOL_SOCKET, SO_OOBINLINE, [515004615020773376], [4]) = 0
[pid 2388] recvfrom(14, "GET /OPEN_", 10, MSG_PEEK, NULL, NULL) = 10
[pid 2388] recvfrom(14, "GET /OPEN_SESSION?LOGIN=HAS_ADMI"..., 4096, 0, NULL, NULL) = 246
[pid 2388] sendto(14, "HTTP/1.1 200 OK\r\nServer: MY_SER"..., 192, 0, NULL, 0) = 192
[pid 2388] sendto(14, "<?xml version='1.0' encoding = '"..., 680, 0, NULL, 0) = 680
[pid 2361] --- SIGIO (I/O possible) @ 0 (0) ---
[pid 2388] recvfrom(14, "", 4096, 0, NULL, NULL) = 0
[pid 2388] shutdown(14, 2 /* send and receive */) = 0