인디노트
iphdr 에서 TCP, UDP 헤더 구하기 본문
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 헤더 정보 사용
}'개발 플랫폼 및 언어 > 네트워크 기술' 카테고리의 다른 글
| NIC 맥주소 가져오는 C 코드 (0) | 2023.04.11 |
|---|---|
| Ethernet 에서 내가 보낸 데이터를 내가 수신하는 것을 감지하는 방법 (0) | 2023.04.11 |
| OSI 7 계층에서의 스위치 및 라우터의 역할 (0) | 2022.03.21 |
| 네트워크 패킷 (데이터) 송수신 (0) | 2022.03.21 |
| VMWare Fusion 에 네트워크 추가 (링크) (0) | 2021.12.12 |
Comments