인디노트

iphdr 에서 TCP, UDP 헤더 구하기 본문

개발 플랫폼 및 언어/네트워크 기술

iphdr 에서 TCP, UDP 헤더 구하기

인디개발자 2023. 4. 11. 01:08

TCP 헤더

struct tcphdr {
    unsigned short int source;  // 출발지 포트 번호
    unsigned short int dest;    // 목적지 포트 번호
    unsigned int seq;           // 전송 시퀀스 번호
    unsigned int ack_seq;       // 수신 시퀀스 번호
    unsigned short int doff;    // 데이터 오프셋
    unsigned short int window;  // 윈도우 크기
    unsigned short int check;   // 체크섬
    unsigned short int urg_ptr; // 긴급 포인터
};

 

UDP 헤더

struct udphdr {
    unsigned short int source;  // 출발지 포트 번호
    unsigned short int dest;    // 목적지 포트 번호
    unsigned short int len;     // 데이터 길이
    unsigned short int check;   // 체크섬
};

 

IP 헤더와 TCP/UDP 헤더를 모두 포함하는 구조체

struct iphdr {
    // IP 헤더 정보
    // ...

    // TCP/UDP 헤더 정보
    union {
        struct tcphdr tcp;
        struct udphdr udp;
    } transport;
};

 

위 구조체를 사용하여 IP 헤더에서 TCP/UDP 헤더 정보를 추출할 수 있습니다. 예를 들어, 다음과 같이 IP 패킷을 가리키는 포인터가 주어졌다면,

char* ip_packet = /* IP 패킷 데이터 */;
struct iphdr* ip_header = (struct iphdr*)ip_packet;

TCP 헤더는 다음과 같이 추출

if (ip_header->protocol == IPPROTO_TCP) {
    struct tcphdr* tcp_header = &(ip_header->transport.tcp);
    // TCP 헤더 정보 사용
}

UDP 헤더는 다음과 같이 추출

if (ip_header->protocol == IPPROTO_UDP) {
    struct udphdr* udp_header = &(ip_header->transport.udp);
    // UDP 헤더 정보 사용
}
반응형
Comments