정보 제공 함수
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
'C언어 응용 > TCP·IP' 카테고리의 다른 글
TCP/IP - 8. TCP/IP Server: I. 요청시 fork pattern (0) | 2019.10.03 |
---|---|
TCP/IP - 7. TCP/IP client 프로그램 Sample (0) | 2019.10.03 |
TCP/IP - 5. 공통 라이브러리 만들기(기본함수) (0) | 2019.10.01 |
TCP/IP - 4. Client 처리 flow (0) | 2019.10.01 |
TCP/IP - 3. Server 처리 flow (0) | 2019.10.01 |