私はlinuxのCプログラムを使ってmacアドレスを探したい。どうやってするの?グーグルthroug検索のCプログラムを使ってlinuxのインターフェースのMACアドレスを取得する方法は?
6
A
答えて
26
1分:(私はそれを自分でテストしていませんが、私はその瞬間にWindowsマシン上で働いている)
/*
* 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 APIです。
Lib PCAP。
いくつかのサンプルコード:
#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アドレスも取得)。
両方のライブラリのためのUNIX &勝利ポートがあります。
関連する問題
- 1. pcapを使ってlinuxのインターフェースのipアドレスを取得する
- 2. php経由でシステムインターフェースのMACアドレスを取得する方法(Linux)
- 3. MACアドレスを取得するLinux(Ubuntu)
- 4. シェルを使ってMacアドレスでデバイス名を取得する方法は?
- 5. AndroidでプログラムでMacアドレスからIPアドレスを取得する方法は?
- 6. RubyでMACアドレスをプログラムで取得する方法
- 7. MACアドレスを取得する方法
- 8. プログラムで(C/C++)Linuxで国コードを取得する方法は?
- 9. Objective-CでMACアドレスを取得する
- 10. Retrive MAC ...私はMACのIPアドレスをアドレス取得するLINQ
- 11. PCの安定したMACアドレスを取得する方法は?
- 12. Xamarin.FormsでクライアントデバイスのMACアドレスを取得する方法は?
- 13. JAVAのクライアントマシンからMACアドレスを取得する方法は?
- 14. LG WebOsデバイスのMACアドレスを取得する方法は?
- 15. Javaのローカルネットワーク上のマシンのMACアドレスを取得する方法
- 16. どのブラウザを使ってMACアドレスを取得するのですか?
- 17. MACアドレスを取得
- 18. コンピュータのMACアドレスを取得
- 19. Windows-mobileからMACアドレスを取得する方法は?
- 20. すべてのインターフェイスのC/C++ LinuxのMACアドレス
- 21. WebアプリケーションでClient MachineのMacアドレスを取得する方法
- 22. Azure PowerShellでVMのMACアドレスを取得する方法
- 23. linuxでlibnl3(netlink version 3)を使ってインタフェースのipv4アドレスを取得する方法は?
- 24. Linuxのプログラムでディレクトリのサイズを取得する方法は?
- 25. インターフェースのためにLinuxインタフェースエイリアス(IFLA_IFALIAS)をプログラマチックに取得する方法は?
- 26. リモートホストのMACアドレスを取得する
- 27. getmacを使って現在のマシンのMACアドレスをnode.jsで取得します。
- 28. OS XのインターフェースからのMACアドレス
- 29. libnetを使ってインタフェースのipv6アドレスを取得する方法は?
- 30. ASP.NETを使用してMacとIPアドレスを取得する方法ログインのC#ユーザ
とにかく「eth0」をハードコードしないで入手するには? –
ネットワークアダプターを割り当てる必要があります。そうでなければ、MACアドレスがありません。入力または引き数で行うことができますが、アダプターが必要になります。 –
#include close() –
notlesh