Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

네트워크 보안 9주차 정리 (네트워크용 기본 API) 본문

2-2/네트워크 보안

네트워크 보안 9주차 정리 (네트워크용 기본 API)

김브래 2023. 10. 31. 19:03

네트워크용 기본 API




주소체계 변환


문자열형 주소의 32비트 정수형 주소로 변환

함수: inet_addr()
• Dotted-Decimal Notation을 Big-Endian의 32비트 정수형 데이터로 변환하는 함수

 

인자값
• *cp : 문자열 형태의 IP 주소 값(“xxx.xxx.xxx.xxx”, 길이 ≤ 15)

 

결과값
• 성공: 4바이트 정수(Big-Endian)
• 실패: INADDR_NONE (0xFFFFFFFF)

함수: inet_network()
• Dotted-Decimal Notation을 호스트 데이터 형태의 32비트 정수형 데이터로 변환하는 함수
• 네트워크 사용을 위해서는 htonl() 함수 호출이 필요


인자값
• *cp : 문자열 형태의 IP 주소 값(“xxx.xxx.xxx.xxx”, 길이 ≤ 15)


결과값
• 성공: 4바이트 정수
• 실패: INADDR_NONE (0xFFFFFFFF)

함수: inet_aton()
• Dotted-Decimal Notation(문자열)을 32비트형 네트워크 주소(정수형)로 변환하는 함수
• inet_addr()과 유사하나, 두 번째 인자가 출력물이 됨

 

인자값
• *cp : 문자열 형태의 IP 주소 값(“xxx.xxx.xxx.xxx”, 길이 ≤ 15)
• *inp : 4바이트 정수(Big-Endian)


결과값
• 성공: 1
• 실패: 0

32비트 정수형을 문자열형 주소로 변환

함수: inet_ntoa()
• 32비트형 네트워크 주소(정수)를 문자열 형태의 주소형태(Dotted-Decimal Notation)로 변환
• 출력결과물의 위치는 정적 메모리(static memory)에 기록됨
• Re-entrance 문제 주의(다중 스레드 사용 시)

 

인자값
• in : 4바이트 네트워크 주소


결과값
• 문자열 주소



호스트정보 취득 및 송수신 함수들




IP 주소와 도메인명 변환


관련 APIs

gethostbyname(): 도메인 명을 4바이트 정수(Big-Endian)로 변환

gethostbyaddr(): 4바이트 정수(Big-Endian)를 도메인 명으로 변환

 

inet_ntoa(): 32비트 2진수로 된 주소값을 “.”이 있는 십진수 문자열(Dotted-Decimal Notation)로 변환
inet_addr(): “.”이 있는 십진수 문자열 변수를 4바이트 정수(Big-Endian)로 변환

4바이트 네트워크 주소 얻기

함수: gethostbyname()
- 도메인 명을 통해 4바이트의 네트워크 주소로 변환

 

인자값:
- *name : 도메인 명

 

결과 값:
- 성공 : hostent 구조체 포인터
- 실패 : NULL

구조체 : hostent

호스트의 정보를 관리하기 위한 데이터 구조

 

구성 요소:
• *h_name : 호스트 명칭
• **h_aliases : 호스트의 별칭들
• h_addrtype : 주소 타입(IPv4: AF_INET, IPv6: AF_INET6)
• h_length : 주소체계의 길이(바이트)
• **h_addr_list : 주소들 (타입: struct in_addr)

도메인명 얻기

함수: gethostbyaddr()

- 4바이트의 네트워크 주소를 통해 도메인 명으로 변환

 

인자값:
- *addr : 4바이트 주소가 설정된 소켓 구조체 변수
- len : 주소체계(*addr)의 크기(=4)
- type : 소켓 타입(IPv4: AF_INET, IPv6: AF_INET6)

 

결과 값:
- 성공 : hostent 구조체 포인터
- 실패 : NULL


데이터 송수신


TCP 데이터 수신

함수: read()
- 파일기술자를 통해 지정한 개수만큼 데이터를 읽음
- 파일기술자가 소켓 타입이면 수신버퍼에서 데이터를 읽어 들임

 

인자값:
- fd : 소켓의 파일기술자
- *buf : 수신된 데이터가 기록될 공간
- count : 수신가능 길이(버퍼의 크기)

 

결과 값:
- 성공 : 수신한 데이터의 길이
- 실패 : -1

함수: recv()
• read() 함수의 기능과 동일하나 소켓에서만 사용됨
- flags인자에 따라 운영 기능이 read() 함수 대비 더 많음

 

• 소켓을 통해 수신된 데이터를 지정한 개수만큼 읽음

 

인자값:
- fd : 소켓의 파일기술자
- *buf : 수신된 데이터가 기록될 공간
- count : 수신가능 길이(버퍼의 크기)
- flags : 운영 방식 (이미지)

 

결과 값:
- 성공 : 수신한 데이터의 길이
- 실패 : -1

TCP 데이터 송신

함수 : write()
- 파일기술자를 통해 지정한 개수만큼 데이터를 송신
- 파일기술자가 소켓 타입이면 송신 버퍼에 데이터를 기록

 

인자값:
- fd : 소켓의 파일기술자
- *buf : 송신할 데이터
- count : 송신할 데이터의 길이

 

결과 값:
- 성공 : 송신 버퍼에 기록한 데이터의 길이
- 실패 : -1

함수 : send()
• Write() 함수의 기능과 동일하나 소켓에서만 사용
– Flags에 따라 운영 기능이 더 확장됨

 

• 연결형 소켓을 통해 전달될 송신 버퍼에 데이터를 지정한 개수만큼 기록

 

인자값:
- Fd : 소켓의 파일기술자
- *buf : 송신할 데이터
- Count : 송신할 데이터의 길이
- Flags : 운영 방식 (이미지)

 

결과 값:
- 성공 : 송신 버퍼에 기록한 데이터의 길이
- 실패 : -1