때때로 누군가가 다음과 같은 질문을 "우리는 서비스 파일에 응용 프로그램 포트를 추가하고 지금 다른 응용 프로그램은 그것을 사용하고 있습니다 – 왜". 대답은 서비스 파일이 포트 번호를 예약하지 않기 때문입니다. 서비스 파일이 존재하므로 응용 프로그램이 getservbyname 함수를 호출하여 서비스와 연결된 포트 번호를 찾거나 getservbyport 함수에 전화하여 포트 번호와 연결된 서비스의 이름을 찾을 수 있습니다. getservbyport 함수가 첫 번째 서비스만 반환되지만 두 개의 서로 다른 서비스가 동일한 포트 번호로 매핑되는 것을 막을 수는 없습니다. 또한 응용 프로그램이 getservbyname을 호출하여 사용해야 하는 포트를 찾아야 한다는 요구 사항도 없습니다. 응용 프로그램 개발자는 포트 번호를 하드 코딩하거나 매개 변수로 입력할 수 있도록 허용할 수 있습니다.
포트 번호를 예약할 수 있는 방법은 없으며, 포트 번호를 사용하는 것 이외에는 다시 USEADDR 소켓 옵션을 설정하지 않은 경우에만 예약할 수 없습니다. 따라서 STCP가 시작된 후 다른 응용 프로그램이 포트를 잡기 전에 가능한 한 빨리 응용 프로그램을 시작합니다.
경우에 따라 범인은 다른 서버 응용 프로그램이 아니라 클라이언트 응용 프로그램입니다. 대부분의 클라이언트 응용 프로그램은 특정 로컬 포트에 바인딩되지 않지만 로컬 포트가 필요하기 때문에 STCP는 동적 포트 범위(49152 - 65535)에서 하나를 할당합니다. 응용 프로그램이 이 범위의 포트를 사용하는 경우 등록된 범위(1024-49151)에서 포트를 사용하도록 변경하는 것이 좋습니다. 이러한 포트는 응용 프로그램이 명시적으로 바인딩하는 경우에만 사용됩니다.
좋아, 응용 프로그램의 포트를 사용하여 거기에 다른 응용 프로그램이 있다고 가정 해 봅시다. 어떤 응용 프로그램이 무엇인지, 그리고 더 중요한 것은 누가 응용 프로그램을 시작했는지 어떻게 식별할 수 있습니까? 다음 세 단계 프로세스입니다.
- 명령 실행
“netstat -numeric -all_sockets -PCB_addr”
인터로퍼를 식별하고, 이 경우 내가 관심있는 포트 번호는 13592입니다.
netstat -numeric -all_sockets -PCB_addr
Active connections (including servers)
PCB Proto Recv-Q Send-Q Local Address Foreign Address
(state)
. . .
8e3aa300 tcp 0 0 *:13592 *:* LISTEN
. . .
ready 13:50:12
- 명령 실행
“analyze_system -request_line 'match dv; dump_onetcb 8e3aa300' -quit”
dump_onetcb 전달하면 인터로퍼의 PCB를 요청합니다( 8e3aa300). 소켓과 연결된 STCP 장치를 식별합니다.
OpenVOS Release 17.0.1aj, analyze_system Release 17.0.1aj
Current process is 664, ptep 8E0EE800, Noah_Davids.CAC
sth_dvtx = 121 (stcp.m16_202)
- 명령 실행
“who_locked #stcp.m16_202”
장치를 사용하는 프로세스를 확인합니다.
stcp.m16_202:
Object is write locked by Barney_Rubble.Dev (login) on module
%vs#m1
executing stcp_calls.pm.
그리고 거기 당신은 그것을 가지고, 당신이 지금해야 할 모든이 바니 잔해에 문의하고 정중하게 그가 다른 포트 번호를 사용하는 것이 좋습니다.