반응형

정보 제공 함수

int TCPIPgetSockName(int sockfd, struct sockaddr_in *info) 함수 

현재 socket의 자기 자신의 정보(IP, port번호)를 얻는 함수입니다.

/*===================================================================================
* TCPIPgetSockName : socket의 local의 정보(IP, port번호)를 얻습니다.
* 파라미터 :
*        sockfd : TCPIPconnect(), TCPIPaccept(), TCPIPserver() 등으로 생성한 socket descriptor
*        info   : local TCP/IP 정보를 저장할 buffer
* return :
*        0      : 정상처리됨
*        -1     : 오류 발생
===================================================================================*/

int TCPIPgetSockName(int sockfd, struct sockaddr_in *info)
{
    int addr_len = sizeof(struct sockaddr_in);

    return getsockname(sockfd, (struct sockaddr *)info, &addr_len);
}

 


 

char * TCPIPgetLocalIpAddress(char *ip_addr, int sockfd) 함수 

현재 socket 자신의 IP주소를 얻는 함수입니다.

/*===================================================================================
* TCPIPgetLocalIpAddress : 자신의 IP 주소를 dotted-decimal notation으로 얻습니다.
* 파라미터 :
*        ip_addr : IP 주소를 저장할 문자열 buffer, 16바이트 이상 할당되어 있어야 함.
*        sockfd  : socket descriptor 
* return :
*        ip address 
===================================================================================*/
char * TCPIPgetLocalIpAddress(char *ip_addr, int sockfd)
{
    struct sockaddr_in info;
    
    TCPIPgetSockName(sockfd, &info);
    
    return TCPIPgetIpAddress(ip_addr, &info);
}

 


 

int TCPIPgetLocalPortNo(int sockfd) 함수 

현재 socket 자신의 port번호를 얻는 함수입니다.

/*===================================================================================
* TCPIPgetLocalPortNo : 자신의 port번호를 얻습니다.
* 파라미터 :
*        ip_addr : IP 주소를 저장할 문자열 buffer, 16바이트 이상 할당되어 있어야 함.
*        sockfd  : socket descriptor 
* return :
*        ip address 
===================================================================================*/

int TCPIPgetLocalPortNo(int sockfd)
{
    struct sockaddr_in info;
    
    TCPIPgetSockName(sockfd, &info);

    return TCPIPgetPortNo(&info);
}

 


 

int TCPIPgetPeerName(int sockfd, struct sockaddr_in *info) 함수 

현재 socket의 상대방 정보(IP, port번호)를 얻는 함수입니다.

/*===================================================================================
* TCPIPgetPeerName : socket의 peer(상대방)의 정보(IP, port번호)를 얻습니다.
* 파라미터 :
*        sockfd : TCPIPconnect(), TCPIPaccept() 등으로 생성한 socket descriptor
*        info   : local TCP/IP 정보를 저장할 buffer
* return :
*        0      : 정상처리됨
*        -1     : 오류 발생
===================================================================================*/

int TCPIPgetPeerName(int sockfd, struct sockaddr_in *info)
{
    int addr_len = sizeof(struct sockaddr_in);

    return getpeername(sockfd, (struct sockaddr *)info, &addr_len);
}

 


 

char * TCPIPgetPeerIpAddress(char *ip_addr, int sockfd) 함수 

현재 socket의 상대방 IP address를 얻는 함수입니다.

이를 이용하여 상대시스템의 정보를 logging하거나 허용되지 않은 상대 IP에 대해서 차단을 한다든지 할 수 있습니다.

/*===================================================================================
* TCPIPgetPeerIpAddress : 상대방의 IP 주소를 dotted-decimal notation으로 얻습니다.
* 파라미터 :
*        ip_addr : IP 주소를 저장할 문자열 buffer, 16바이트 이상 할당되어 있어야 함.
*        sockfd  : socket descriptor 
* return :
*        ip address 
===================================================================================*/
char * TCPIPgetPeerIpAddress(char *ip_addr, int sockfd)
{
    struct sockaddr_in info;

    TCPIPgetPeerName(sockfd, &info);
    
    return TCPIPgetIpAddress(ip_addr, &info);
}

 


 

char * TCPIPgetPeerIpAddress(char *ip_addr, int sockfd) 함수 

현재 socket의 상대방 port번호를 얻는 함수입니다.

/*===================================================================================
* TCPIPgetPeerPortNo : 상대방의 port번호를 얻습니다.
* 파라미터 :
*        sockfd  : socket descriptor 
* return :
*        상대방의 port 번호
===================================================================================*/

int TCPIPgetPeerPortNo(int sockfd)
{
    struct sockaddr_in info;

    TCPIPgetPeerName(sockfd, &info);

    return TCPIPgetPortNo(&info);
}

 


 

char * TCPIPgetIpAddress(char *ip_addr, const struct sockaddr_in *info) 함수 

socket 정보에서 IP address를 얻습니다
주로 accept등으로 얻은 상대 접속정보에서 IP정보를 추출합니다.

/*===================================================================================
* TCPIPgetIpAddress : IP 주소를 dotted-decimal notation으로 얻습니다.
* 파라미터 :
*        ip_addr : IP 주소를 저장할 문자열 buffer, 16바이트 이상 할당되어 있어야 함.
*        info    : TCP/IP 정보가 저장된 구조체
*                  TCPIPaccept(), TCPIPgetPeerName(), TCPIPgetSockName() 등으로 얻습니다.
* return :
*        ip address 
===================================================================================*/

char * TCPIPgetIpAddress(char *ip_addr, const struct sockaddr_in *info)
{
    strcpy(ip_addr, inet_ntoa(info->sin_addr));
    
    return ip_addr;
}

 


 

int TCPIPgetPortNo(const struct sockaddr_in *info) 함수 

socket 정보에서 port번호를 얻습니다. 
주로 accept등으로 얻은 상대 접속 정보에서 port번호를 추출합니다.

/*===================================================================================
* TCPIPgetPortNo : port 번호를 얻습니다.
* 파라미터 :
*        info   : TCP/IP 정보가 저장된 구조체
*                 TCPIPaccept(), TCPIPgetpeername(), TCPIPgetsockname() 등으로 얻습니다.
* return :
*        port번호 
===================================================================================*/

int TCPIPgetPortNo(const struct sockaddr_in *info)
{
    return ntohs(info->sin_port);
}

 


see also :  TCP/IP 통신 프로그램   Socket 통신 관련 Library  

반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,