2009-10-05 10 views

उत्तर

26

1 गूगल throug खोज की मिनट (i इसे अपने आप को परीक्षण नहीं किया, मैं पल में एक विंडोज़ मशीन पर काम कर रहा हूँ)

/* 
* 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

वैसे भी इसे हार्डकोडिंग "eth0" के बिना प्राप्त करने के लिए ?? –

+0

आपको नेटवर्क एडाप्टर असाइन करना होगा, अन्यथा कोई मैक पता नहीं है, आप इसे इनपुट या तर्क के रूप में कर सकते हैं, लेकिन आपको एडाप्टर की आवश्यकता होगी। –

+0

# बंद करने के लिए शामिल करें() – notlesh

2

ईथरनेट का प्रबंधन करने के लिए एक महान पुस्तकालय नहीं है। यदि आप निम्न स्तर की सामग्री पर जाना चाहते हैं तो यह निश्चित रूप से सीखने लायक है। सीखने के लिए यह काफी कठिन सीपीआई है।

लिब पीसीएपी।

link to lib pcap sourceforge

कुछ नमूना कोड:

#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); 

} 
} 

नहीं है भी अच्छा पुस्तकालय की तरह "कर्नेल कार्यों आवरण": Dnet

जो महान सुविधा प्रदान करता है निम्न स्तर नेटवर्किंग पर इसका इस्तेमाल करने । (मैक पते भी प्राप्त कर रहे हैं)।

DNET

दोनों पुस्तकालयों के लिए यूनिक्स & जीत बंदरगाहों रहे हैं।

संबंधित मुद्दे

 संबंधित मुद्दे