브래의 슬기로운 코딩 생활
네트워크 보안 9주차 정리 (네트워크용 기본 API) 본문
네트워크용 기본 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
'2-2 > 네트워크 보안' 카테고리의 다른 글
네트워크 보안 11주차 정리 (소켓 및 TCP 프로그래밍) (0) | 2023.11.21 |
---|---|
네트워크 보안 10주차 정리 (TCP 프로그래밍) (0) | 2023.11.07 |
네트워크 보안 중간고사 힌트 정리 (2) | 2023.10.21 |
네트워크 보안 7주차 정리 (UNIX 기본 함수) (0) | 2023.10.17 |
네트워크 보안 6주차 정리 (리눅스 명령어) (2) | 2023.10.10 |