일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- css
- apple
- 애플
- MYSQL
- appres
- 안드로이드
- SSL
- FIDO2
- SWIFT
- 인증
- MFA
- Android
- albumbook
- OSX
- 2FA
- fido
- WebAuthn
- MSYS2
- Xcode
- 앨범북
- 앱스토어
- OTP
- 앱리소스
- openssl
- git
- Nodejs
- kmip
- SSH
- SwiftUI
- otpkey
Archives
- Today
- Total
인디노트
NIC 맥주소 가져오는 C 코드 본문
Linux에서는 ioctl() 함수를 사용하여 네트워크 인터페이스의 정보를 가져올 수 있습니다. 이를 활용하여 자신의 Ethernet 카드의 MAC 주소를 가져올 수 있습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("Failed to create socket");
return 1;
}
// 인터페이스 이름 설정
char ifname[] = "eth0";
// 인터페이스 정보 구조체 생성
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, ifname, IFNAMSIZ - 1);
// MAC 주소 가져오기
if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0) {
perror("Failed to get MAC address");
return 1;
}
// MAC 주소 출력
unsigned char *mac = (unsigned char*) ifr.ifr_hwaddr.sa_data;
printf("My MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
close(sockfd);
return 0;
}
위 코드에서 ifname은 자신의 Ethernet 카드의 인터페이스 이름을 나타내는 문자열입니다. 이를 ifr 구조체의 ifr_name 멤버에 할당하여, 해당 인터페이스의 정보를 가져올 수 있습니다. ioctl() 함수에 SIOCGIFHWADDR 옵션을 전달하여, MAC 주소를 가져올 수 있습니다. 가져온 MAC 주소는 ifr 구조체의 ifr_hwaddr.sa_data 멤버에 저장되어 있습니다.
반응형
'개발 플랫폼 및 언어 > 네트워크 기술' 카테고리의 다른 글
TCP 전송의 C 코드 (0) | 2023.04.12 |
---|---|
sendto 로 UDP 데이터 전송 C 코드 (0) | 2023.04.12 |
Ethernet 에서 내가 보낸 데이터를 내가 수신하는 것을 감지하는 방법 (0) | 2023.04.11 |
iphdr 에서 TCP, UDP 헤더 구하기 (0) | 2023.04.11 |
OSI 7 계층에서의 스위치 및 라우터의 역할 (0) | 2022.03.21 |
Comments