인디노트

Ethernet 에서 내가 보낸 데이터를 내가 수신하는 것을 감지하는 방법 본문

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

Ethernet 에서 내가 보낸 데이터를 내가 수신하는 것을 감지하는 방법

인디개발자 2023. 4. 11. 03:40

C 코드로 Ethernet을 통해 전송한 데이터를 수신할 때, 일반적으로 Ethernet 프레임의 헤더를 확인하여 데이터의 출처를 확인할 수 있습니다. Ethernet 프레임의 헤더는 전송된 데이터에 대한 중요한 정보를 포함하고 있으며, 이 중 하나는 MAC 주소입니다.

MAC 주소는 Ethernet 카드에 할당된 고유한 식별자이며, 데이터를 보내는 컴퓨터의 MAC 주소와 수신하는 컴퓨터의 MAC 주소를 Ethernet 프레임의 헤더에서 확인할 수 있습니다.

따라서, 수신된 데이터의 Ethernet 프레임 헤더에서 출발지 MAC 주소와 목적지 MAC 주소를 비교하여, 데이터가 내가 보낸 것인지 여부를 확인할 수 있습니다.

다음은 C 코드에서 이를 구현하는 예시입니다.

#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <net/ethernet.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>

int main() {
    int sockfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
    if (sockfd < 0) {
        perror("Failed to create socket");
        return 1;
    }

    // Ethernet 프레임 수신
    char buffer[65535];
    memset(buffer, 0, sizeof(buffer));
    int buflen = recv(sockfd, buffer, sizeof(buffer), 0);

    // Ethernet 헤더 구조체 생성
    struct ethhdr *eth = (struct ethhdr*) buffer;

    // 출발지 MAC 주소와 목적지 MAC 주소 비교
    if (memcmp(eth->h_source, MY_MAC_ADDRESS, ETH_ALEN) == 0) {
        printf("수신된 데이터는 내가 보낸 데이터입니다.\n");
    } else {
        printf("수신된 데이터는 내가 보낸 데이터가 아닙니다.\n");
    }

    return 0;
}
반응형
Comments