우선
(1) iphdr 구조체
/usr/include/linux/ip.h 에 정의되어 있다. 뭐 버전마다 다를수도 잇겟지만...-0-ㅋ
struct iphdr {
unsigned char ihl:4, // 헤더 길이 // header length
unsigned int version:4; // 버전 // version
unsigned char tos; // 서비스 타입 // type of service
unsigned short tot_len; // 전체 길이 // total length
unsigned short id; // identification
unsigned short frag_off; // fragment offset field
unsigned char ttl; // time to live
unsigned char protocol; // protocol
unsigned short check; // check sum
unsigned long saddr; // source address
unsigned long daddr; // dest address
/*The options start here. */
};
아래는 ip 헤더의 그림이다...
0 8 9 15 16 31
-----------------------------------------------------------
| | header| | |
| version| length | type of service| total length |
-----------------------------------------------------------
| identification | flags | fragment offset |
-----------------------------------------------------------
| time to live | protocol | header checksum |
-----------------------------------------------------------
| source Ip address |
-----------------------------------------------------------
| destination IP address |
----------------------------------------------------------
즉 iphdr 구조체는 ip 헤더의 옵션을 정의한거 같다.
(2) in_addr 구조체
in_addr 구조체를 통해 바이트 집합, 한쌍의 16비트 워드, 하나의 32비트 워드로서 IP 어드레스에 접근할 수 있습니다.
이러한 유연성은 때론 코딩시 상당히 성가신 구문을 만들어 내기도 한다.
struct in_addr {
union {
struct {
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
};
'네트워크' 카테고리의 다른 글
윈도우 네트워크 프로그래밍 (0) | 2010.12.28 |
---|---|
libnet 라이브러리 (0) | 2010.08.20 |
주소 변환하기 (0) | 2010.06.29 |
libpcap 라이브러리 API 정리 (0) | 2010.06.24 |
Libpcap (Pcap) 라이브러리 (0) | 2010.06.23 |
RAW 소켓을 하면서...[ ping 프로그램 ( icmp 프로토콜) ] (0) | 2010.03.29 |
Looping(뻉뺑이) - ? (0) | 2010.01.22 |
브리지와 스위치의 차이점 (0) | 2010.01.22 |
libpcap : 패킷 캡쳐 라이브러리 / libnet : 패킷 생성 라이브러리 (0) | 2009.12.03 |
네트워크/프토토콜/LAN,MAN,WAN / TCP/IP /DNS /ping,tracert / dhcp/ 라우터 랜카드,..백본...등등 (0) | 2009.05.05 |