programing

소켓 - 할당된 포트 및 주소를 확인하는 방법

minimums 2023. 7. 27. 21:46
반응형

소켓 - 할당된 포트 및 주소를 확인하는 방법

저는 이것을 이해하는 데 어려움을 겪고 있습니다 - 저는 이 가이드를 사용하여 C의 소켓을 사용하고 있습니다 - http://binarii.com/files/papers/c_sockets.txt

다음을 사용하여 IP 및 포트를 자동으로 가져오려고 합니다.

server.sin_port = 0;              /* bind() will choose a random port*/
server.sin_addr.s_addr = INADDR_ANY;  /* puts server's IP automatically */
...
...
bind(int fd, struct sockaddr *my_addr,int addrlen); // Bind function

바인딩에 성공한 후 실제로 할당된 IP 및 포트를 확인하려면 어떻게 해야 합니까?

서버 소켓인 경우 소켓을 호출하여 수신 중인 포트 번호를 찾아야 합니다.

struct sockaddr_in sin;
socklen_t len = sizeof(sin);
if (getsockname(sock, (struct sockaddr *)&sin, &len) == -1)
    perror("getsockname");
else
    printf("port number %d\n", ntohs(sin.sin_port));

IP 주소에 대해서는, 만약 당신이INADDR_ANY그러면 서버 소켓은 시스템의 IP 주소에 대한 연결을 허용할 수 있으며 서버 소켓 자체에는 특정 IP 주소가 없습니다.예를 들어, 시스템에 두 개의 IP 주소가 있는 경우 이 서버 소켓에 각각 다른 로컬 IP 주소를 가진 두 개의 수신 연결이 있을 수 있습니다.사용할 수 있습니다.getsockname()특정 연결(사용자가 얻을 수 있는 연결)을 위한 소켓에서accept()해당 연결에서 사용 중인 로컬 IP 주소를 확인합니다.

코드의 설명이 잘못되었습니다.INADDR_ANY서버의 IP를 자동으로 입력하지 않습니다.Mark4o의 답변설명된 이유로 기본적으로 0.0.0을 입력합니다.

언급URL : https://stackoverflow.com/questions/4046616/sockets-how-to-find-out-what-port-and-address-im-assigned

반응형