我需要使用Java获取我的Android设备的MAC地址.我在网上搜索过,但是我找不到任何有用的东西.
Linux中是否有一种方法可以使用C代码获取"ifconfig eth0"返回的相同信息?我对IP地址,链接状态和MAC地址等感兴趣.
这是ifconfig的示例输出:
eth0 Link encap:Ethernet HWaddr 00:0F:20:CF:8B:42
inet addr:217.149.127.10 Bcast:217.149.127.63 Mask:255.255.255.192
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2472694671 errors:1 dropped:0 overruns:0 frame:0
TX packets:44641779 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1761467179 (1679.8 Mb) TX bytes:2870928587 (2737.9 Mb)
Interrupt:28
Run Code Online (Sandbox Code Playgroud) 有没有办法通过接口获取MAC地址getifaddrs()?
我已经有了这个,获取IP地址,但我有点想念MAC.我试图寻找信息getifaddrs(),但没有任何关于MAC地址
struct ifaddrs *iflist, *iface;
if (getifaddrs(&iflist) < 0)
{
perror("getifaddrs");
}
char addrp[INET6_ADDRSTRLEN];
char macp[INET6_ADDRSTRLEN];
int i=0;
for (iface = iflist; iface; iface = iface->ifa_next)
{
int af = iface->ifa_addr->sa_family;
const void *addr;
const void *mac;
switch (af)
{
case AF_INET:
addr = &((struct sockaddr_in *)iface->ifa_addr)->sin_addr;
break;
//get mac address somehow?
default:
addr = NULL;
}
if (addr)
{
if (inet_ntop(af, addr, addrp, sizeof addrp) == NULL)
{
perror("inet_ntop");
continue; …Run Code Online (Sandbox Code Playgroud) 我使用以下代码检索当前计算机的所有MAC地址:
ifreq ifr;
ifconf ifc;
char buf[1024];
int sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
if (sock == -1) { ... };
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
if (ioctl(sock, SIOCGIFCONF, &ifc) == -1) { ... }
ifreq *it = ifc.ifc_req;
const ifreq* const end = it + (ifc.ifc_len / sizeof(ifreq));
for (; it != end; ++it) {
strcpy(ifr.ifr_name, it->ifr_name);
if (ioctl(sock, SIOCGIFFLAGS, &ifr) == 0) {
if (!(ifr.ifr_flags & IFF_LOOPBACK)) {
if (ioctl(sock, SIOCGIFHWADDR, &ifr) == 0) {
unsigned char mac_address[6]; …Run Code Online (Sandbox Code Playgroud) 可能重复:
Linux/C++:获取本地计算机的IP地址
我试图获取本地计算机的所有接口的IP和MAC地址,但我不能真正成功.我需要把它放在一起,所以我知道哪个IP属于哪个MAC.
我在google上进行了很多搜索,甚至在这里,但是我找不到真正的C代码.
请你帮助我好吗?
提前致谢!我真的很感激!
序言
我工作的Xcode 7.0.1,斯威夫特2
我试图了解如何检索这些信息的小时数(更新、天数)。
我已经看到有一个框架CoreBluetooth可能可以帮助我。(更新,绝对不是!!)
任何的想法?Objective-c/swift/c/c++ .. 无论如何.. 是一样的。
我已经在这个答案中测试了代码,但打印:
>>> WIFI MAC 地址:02:00:00:00:00:00
>>> IPHONE 蓝牙 MAC 地址:02:00:00:00:00:ffffffff
>>> iPad 蓝牙 MAC 地址:02:00:00 :00:00:01
关于这一点,我已经阅读了官方文档:
在 iOS 7 及更高版本中,如果您询问 iOS 设备的 MAC 地址,系统会返回值 02:00:00:00:00:00。如果您需要识别设备,请改用 UIDevice 的 identifierForVendor 属性。(需要标识符用于自己的广告目的的应用程序应考虑改用 ASIdentifierManager 的 AdvertisingIdentifier 属性。)
问题是:如果其他设备可以读取我的蓝牙mac地址,为什么我不能?
我认为应该有办法做到这一点,当然。
我也尝试了这个答案(和其他答案)的片段,但我从来没有得到真正的 mac 地址。
我知道要了解 mac 的蓝牙信息,我可以在终端上运行:
system_profiler SPBluetoothDataType | sed -n "/Apple Bluetooth Software Version\:/,/Manufacturer\:/p"
Run Code Online (Sandbox Code Playgroud)
并且只检索 mac 地址我可以“管道”到上一个命令:
egrep -o '([[:xdigit:]]{1,2}-){5}[[:xdigit:]]{1,2}'
Run Code Online (Sandbox Code Playgroud)
我在问.. 我可以在 iPhone 上以编程方式运行这个命令吗?
实际上,我已经尝试过,使用这个伪代码:
script …Run Code Online (Sandbox Code Playgroud) 这个问题与这个问题完全相同:How to get MAC address of your machine using a C program?
“我正在 Ubuntu 上工作。我如何使用 C 程序获取我的机器的 MAC 地址或接口(如 eth0)。”
现在,我通常不接触 C...但在这种情况下我必须这样做。由于我真的不知道以下代码(取自上面链接的答案)中发生了什么,因此我需要一些帮助。
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/if.h>
#include <netdb.h>
#include <stdio.h>
int main()
{
struct ifreq s;
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
strcpy(s.ifr_name, "eth0");
if (0 == ioctl(fd, SIOCGIFHWADDR, &s)) {
int i;
for (i = 0; i < 6; ++i)
printf(" %02x", (unsigned char) s.ifr_addr.sa_data[i]);
puts("\n");
return 0;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我需要一个将 MAC 地址作为字符串返回的函数,而不是打印 MAC …
c ×6
linux ×4
mac-address ×4
android ×1
bluetooth ×1
c++ ×1
chromeless ×1
ifconfig ×1
interface ×1
ioctl ×1
ip ×1
ip-address ×1
java ×1
jsctypes ×1
networking ×1
objective-c ×1
swift ×1