2009-10-05 24 views

Trả lời

26

1 phút tìm kiếm throug google: (i đã không kiểm tra nó bản thân mình, tôi đang làm việc trên một máy cửa sổ trong thời điểm này)

/* 
* gethwaddr.c 
* 
* Demonstrates retrieving hardware address of adapter using ioctl() 
* 
* Author: Ben Menking <[email protected]> 
* 
*/ 
#include <stdio.h> 
#include <sys/ioctl.h> 
#include <sys/types.h>  
#include <sys/socket.h> 
#include <net/if.h> 

int main(int argc, char *argv[]) 
{ 
    int s; 
    struct ifreq buffer; 

    s = socket(PF_INET, SOCK_DGRAM, 0); 

    memset(&buffer, 0x00, sizeof(buffer)); 

    strcpy(buffer.ifr_name, "eth0"); 

    ioctl(s, SIOCGIFHWADDR, &buffer); 

    close(s); 

    for(s = 0; s < 6; s++) 
    { 
     printf("%.2X ", (unsigned char)buffer.ifr_hwaddr.sa_data[s]); 
    } 

    printf("\n"); 

    return 0; 
}  
+0

Dù sao để tải xuống mà không cần mã hóa cứng "eth0" ?? –

+0

Bạn phải gán bộ điều hợp mạng, nếu không không có địa chỉ mac, bạn có thể thực hiện nó bằng đầu vào hoặc làm đối số, nhưng bạn sẽ cần một bộ điều hợp. –

+0

#include để đóng() – notlesh

2

Có một thư viện tuyệt vời để quản lý ethernet. Nếu bạn muốn đi đến những thứ cấp thấp, nó chắc chắn đáng để học. C API khá khó tìm hiểu.

Lib PCAP.

link to lib pcap sourceforge

Một số mẫu mã:

#include <pcap.h> 
#include <stdlib.h> 
#include <netinet/ip.h> 
#include <netinet/if_ether.h> 

void find_eth_addr(struct in_addr *search_ip, const struct pcap_pkthdr* pkthdr, const u_char *packet) { 
struct ether_header *eth_hdr = (struct ether_header *)packet; 

if (ntohs(eth_hdr->ether_type) == ETHERTYPE_IP) { 
    struct ip *ip_hdr = (struct ip *)(packet + sizeof(struct ether_header)); 
if (ip_hdr->ip_dst.s_addr == search_ip->s_addr) 
    print_eth_addr(eth_hdr->ether_dhost); 
if (ip_hdr->ip_src.s_addr == search_ip->s_addr) 
    print_eth_addr(eth_hdr->ether_shost); 

} 
} 

Ngoài ra còn đẹp "chức năng hạt nhân bao bọc" như thư viện: DNET

mà cung cấp chức năng tuyệt vời để sử dụng nó trên mạng ở mức độ thấp . (cũng nhận được địa chỉ MAC).

DNET

Có UNIX cổng & chiến thắng cho cả hai thư viện.

Các vấn đề liên quan