Netstat는 프로그램이 다른 포트에서 실행되고 있음을 보여줍니다.

Netstat는 프로그램이 다른 포트에서 실행되고 있음을 보여줍니다.

테스트 중인 코드가 있습니다. 프로그램 A는 미리 정의된 소켓에서 프로그램 B가 연결되도록 수신 대기하고 테스트를 위해 프로그램 A와 B의 32개 인스턴스를 실행합니다. 나는 프로그램 A에게 포트 9001-9032를 수신하고 연결할 해당 포트와 함께 프로그램 B의 각 인스턴스에 대한 구성 파일을 입력하도록 지시하는 스크립트를 작성했습니다.

프로그램 A와 B를 시작하는 스크립트를 실행했을 때 netstat -tnap모든 포트 9001-9032 중에서 실제로 사용된 유일한 포트는 다른 프로그램에서 사용했던 9001이라는 것을 발견했습니다(내 실수입니다!). 프로그램 A를 grep할 때 각 인스턴스가 수신 대기해야 하는 포트인 90**과 관련이 없는 완전히 무작위인 것처럼 보이는 포트에서 수신하고 있는 것을 발견했습니다. 그러나 내 프로그램 B(포트 9001-9032에 연결해야 함)는 B가 연결을 시도하는 포트에서 A가 분명히 수신 대기하지 않는 경우에도 프로그램 A의 모든 인스턴스를 찾아 연결할 수 있습니다. 어떻게 이것이 가능한지 혼란스럽습니다.

그것이 충분히 혼란스럽지 않다면 내 32개 프로그램과오직번호 32(청취 9032)는 오류로 인해 시작 시 종료됩니다. 포트에 바인딩을 시도할 때 주소가 거부되었습니다. 무슨 일이 일어나는지 알아보기 위해 포트 15001-15032에서 수신 대기하도록 프로그램을 변경해 보았지만 여전히 똑같은 동작이 나타납니다. 모든 프로그램이 임의의 포트에서 수신 대기하는 것처럼 보이며 32 프로그램이 연결을 설정할 수 없습니다.

내 포트가 왜 이렇게 동작하는지 설명할 수 있는 사람이 있나요? 제가 netstat이나 Linux 포트의 일부를 잘못 이해했나요?

답변1

socat끊어진 것으로 추정되는 연결을 시뮬레이션하려면 임의의 바이트 스트림을 생성하는 명령줄 도구를 사용하는 것이 좋습니다 .

다음 명령을 사용하여 포트를 청취해 보십시오.

socat - TCP-Listen:9001

포트 9001에서 수신 대기하는 TCP 연결의 경우 또는

socat - UDP-Listen:9001

UDP 연결에 사용됩니다.

netstat -p(또는 sockstat)에 설정된 연결이 표시되는지 확인하세요 socat. 그렇다면 코드를 더 자세히 조사하고 다음 위치에 소스 코드 관련 질문을 게시해야 합니다.stackoverflow.com.

다른 것이 있으면 알려주세요!

관련 정보