두 대의 Linux 서버가 있습니다. 그들이 이고 이라고 가정 C
합니다 S
.
C
네 고객님S
나는 S
컴퓨터로 타이핑을 하고 있다.
$ netstat -an | grep tcp 설정
0 0 192.168.1.220:3306 번호: 57010 확립된
C
그러면 이제 연결이 되었다고 말할 수 있습니다 . 기계
속에서 나도 알고 싶어C
프로세스 이름개방 포트57010그리고 S
서버에 접속하세요. 어떻게 해야 하나요? 물론 루트 액세스 권한이 있습니다 C
.
답변1
한 가지 방법은 이라고 말하는 것입니다 lsof -i:57010 -sTCP:ESTABLISHED
. 이는 커널의 열린 파일 핸들 테이블을 탐색하여 해당 포트를 사용하여 TCP 연결을 설정한 프로세스를 찾습니다. (네트워크 소켓은 *ix 유형 시스템의 파일 핸들입니다.) -sTCP:LISTEN
서버 측에서 이를 사용하여 리스너 소켓만 필터링할 수 있습니다.
이것이 작동하는 방식 때문에 lsof
루트로 실행하지 않는 한 사용자가 소유한 프로세스만 볼 수 있습니다. 또한 일반적인 *ix 시스템에는많은특정 시간에 열려 있는 파일 핸들 수입니다. 다른 답변에 제공된 방법 netstat
은 더 빠르며 일반적으로 액세스 요구 사항이 낮습니다.
그러나 이 lsof
접근 방식에는 큰 장점이 있습니다. 모든 *ix 유형 운영 체제가 netstat
출력에 프로세스 이름을 포함하기 위한 플래그를 갖고 있는 것은 아닙니다.lsof
사용할 수 있는 모든 *ix 유형 운영 체제로 포팅됨. netstat
예를 들어 OS X의 경우가 그렇습니다. 옵션 이 있지만 Linux에서와 동일하게 -p
작동하지 않습니다 .netstat -p
lsof
귀하의 질문과 같은 흔하지 않은 포트 번호의 경우 일반적으로 ' 플래그를 추가하지 않고도 문제를 해결할 수 있습니다. -s
왜냐하면 주어진 컴퓨터에 해당 포트에 연결되어 수신 대기하는 프로그램이 있을 가능성이 거의 없기 때문입니다. 포트 번호(예: HTTP의 경우 80)를 추가하면 해당 포트를 동시에 사용하는 여러 프로그램이 있을 수 있으므로 도움이 될 수 있습니다.
다행히 이 플래그는 4.81 이상 -s
에서만 사용할 수 있으므로 대부분의 경우 선택 사항입니다 . lsof
이전 버전에서는 이는 -s
완전히 다른 의미였습니다! 이는 2008년에 비해 후퇴한 변화이지만 여전히 예상치 못한 결과를 가져옵니다. lsof
예를 들어 RHEL 5는 4.78과 함께 제공됩니다.
답변2
netstat -anp | grep 57010
서버에서 사용할 수 있습니다씨. 그러나 이것은 포트를 매핑하는 방화벽 없이만 작동합니다.57010다른 사람에게.
답변3
완전성을 위해 :
ss
새로운 Linux 네트워크 유틸리티 세트( ) 사용 iproute2
:
ss -tp sport = :57010 dst 192.168.1.220