tôi muốn tìm địa chỉ mac bằng chương trình C trong linux. làm thế nào để làm nó?Làm thế nào để có được địa chỉ mac cho một giao diện trong linux bằng cách sử dụng một chương trình C?
6
A
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;
}
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.
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).
Có UNIX cổng & chiến thắng cho cả hai thư viện.
Các vấn đề liên quan
- 1. Bất kỳ cách nào để sử dụng HTML làm giao diện cho một chương trình C/C++?
- 2. Địa chỉ MAC từ giao diện trên OS X (C)
- 3. C/C MAC++ Linux Địa chỉ của tất cả các giao diện
- 4. Làm cách nào để biết địa chỉ IP cho giao diện trong C?
- 5. Format một địa chỉ MAC sử dụng string.Format trong C#
- 6. Cách lấy địa chỉ MAC của giao diện mạng WiFi?
- 7. Làm cách nào để lấy địa chỉ vật lý (MAC) của địa chỉ IP bằng C#?
- 8. Làm thế nào để khởi động lại Linux từ bên trong một chương trình C++?
- 9. Làm cách nào để đặt địa chỉ IP cho giao diện TUN trên OSX (không có địa chỉ đích)?
- 10. Làm thế nào để có được màn hình DPI (linux, mac) theo chương trình?
- 11. Làm thế nào để sử dụng mqueue trong một chương trình c trên một hệ thống dựa trên Linux?
- 12. Nhận địa chỉ MAC trong linux bằng cách sử dụng mono
- 13. Nhận địa chỉ IP của giao diện trên Linux
- 14. Làm thế nào để một giao diện với một enum C bằng cách sử dụng Haskell và FFI?
- 15. Làm thế nào để có được địa chỉ MAC của máy client trong C# và vb.net
- 16. làm thế nào để có được địa chỉ bộ nhớ của một mảng NumPy cho C
- 17. Làm thế nào tôi có thể để perl diễn giải một biến chuỗi đại diện cho một địa chỉ
- 18. Làm cách nào để gửi gói UDP từ một giao diện cụ thể trên Linux?
- 19. Làm thế nào để bạn nhận được bao nhiêu bộ nhớ một chương trình sử dụng?
- 20. Nhận địa chỉ MAC từ xa bằng cách sử dụng Python và Linux
- 21. Làm thế nào để thực hiện chương trình một bộ thử nghiệm bằng cách sử dụng JUnit4 theo chương trình?
- 22. Tôi làm cách nào để có được tên giao diện/chỉ mục được liên kết với một ổ cắm TCP?
- 23. Làm thế nào để áp dụng toàn cầu một XmlAdapter cho một chương trình JAXB?
- 24. Làm thế nào để có được địa chỉ MAC phần cứng trên Windows
- 25. Làm cách nào để buộc nhật thực sử dụng ngôn ngữ giao diện được chỉ định?
- 26. Làm thế nào để có được một tên trang bằng cách sử dụng Selenium Webdriver (C#)?
- 27. Làm thế nào để bạn chuyển đổi một địa chỉ MAC (trong một mảng) thành chuỗi trong C?
- 28. Làm thế nào để chạy các chương trình Ruby trong MAC OS ga
- 29. làm thế nào để có được địa chỉ mac của khách hàng duyệt trang web bằng asp.net MVC C#
- 30. Làm thế nào để làm cho chương trình của tôi là một quá trình nền
Dù sao để tải xuống mà không cần mã hóa cứng "eth0" ?? –
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. –
#include để đóng() –
notlesh