인디노트

iphdr 의 송신자주소 및 수신자 주소를 변경하는 C 함수 본문

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

iphdr 의 송신자주소 및 수신자 주소를 변경하는 C 함수

인디개발자 2023. 4. 14. 15:09
#include <stdio.h>
#include <stdlib.h>
#include <netinet/ip.h>
#include <arpa/inet.h>

// IP 헤더의 송신자 주소와 수신자 주소를 변경하는 함수
void change_ip_address(unsigned char *ip_packet, char *src_ip, char *dst_ip) {
    struct iphdr *ip_header = (struct iphdr*)ip_packet;

    // 송신자 주소와 수신자 주소를 변경함
    ip_header->saddr = inet_addr(src_ip);
    ip_header->daddr = inet_addr(dst_ip);
}

int main() {
    unsigned char ip_packet[256] = {0x45, 0x00, 0x00, 0x3c, 0x1a, 0x2e, 0x40, 0x00, 0x40, 0x06, 0x00, 0x00, 0xc0, 0xa8, 0x00, 0x01, 0xc0, 0xa8, 0x00, 0x02};

    // IP 패킷의 송신자 주소와 수신자 주소를 변경함
    change_ip_address(ip_packet, "192.168.0.3", "192.168.0.4");

    return 0;
}

이 코드에서는 change_ip_address() 함수가 IP 패킷의 송신자 주소와 수신자 주소를 변경합니다. 이 함수는 unsigned char 배열 타입의 ip_packet, 송신자 주소(src_ip), 수신자 주소(dst_ip)를 입력으로 받습니다.

change_ip_address() 함수 내부에서는 입력으로 받은 ip_packet을 struct iphdr 구조체 타입으로 형변환한 뒤, 구조체의 송신자 주소(saddr)와 수신자 주소(daddr)를 각각 입력으로 받은 src_ip와 dst_ip로 변경합니다.

main() 함수에서는 예시로 임의로 생성한 IP 패킷의 송신자 주소와 수신자 주소를 변경한 뒤, 변경된 패킷을 다시 사용할 수 있도록 처리합니다.

반응형
Comments