일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Nodejs
- fido
- Android
- FIDO2
- appres
- Xcode
- MSYS2
- MFA
- git
- 2FA
- 안드로이드
- apple
- otpkey
- SwiftUI
- kmip
- 인증
- SSL
- 앨범북
- MYSQL
- SSH
- SWIFT
- openssl
- OTP
- 앱리소스
- 애플
- albumbook
- 앱스토어
- WebAuthn
- OSX
- css
Archives
- Today
- Total
인디노트
Ethernet 에서 내가 보낸 데이터를 내가 수신하는 것을 감지하는 방법 본문
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;
}
반응형
'개발 플랫폼 및 언어 > 네트워크 기술' 카테고리의 다른 글
sendto 로 UDP 데이터 전송 C 코드 (0) | 2023.04.12 |
---|---|
NIC 맥주소 가져오는 C 코드 (0) | 2023.04.11 |
iphdr 에서 TCP, UDP 헤더 구하기 (0) | 2023.04.11 |
OSI 7 계층에서의 스위치 및 라우터의 역할 (0) | 2022.03.21 |
네트워크 패킷 (데이터) 송수신 (0) | 2022.03.21 |
Comments