Есть отличная библиотека для управления Ethernet.
Если вы хотите перейти на низкоуровневые вещи, безусловно, стоит учиться.
Это довольно сложный C API для изучения.
Lib PCAP.
ссылка на 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
, которая обеспечивает отличную функциональность для использования в сетях низкого уровня.
(также получение MAC-адресов).
DNET
Для обеих библиотек есть порты UNIX и win.