【发布时间】:2019-11-26 10:20:54
【问题描述】:
在 Linux 中,可以使用ioctl 获取网络接口名称和地址列表,例如,使用以下代码:
using boost::format;
using namespace std;
string report;
struct ifconf network_adapters;
network_adapters.ifc_len = 0;
network_adapters.ifc_ifcu.ifcu_buf = nullptr;
int udp_connection = socket(AF_INET, SOCK_DGRAM, 0);
int ioctl_result = ioctl(udp_connection, SIOCGIFCONF, &network_adapters);
vector<char> buf(static_cast<size_t>(network_adapters.ifc_len));
network_adapters.ifc_ifcu.ifcu_buf = buf.data();
ioctl_result = ioctl(udp_connection, SIOCGIFCONF, &network_adapters);
for(int offset = 0; offset < network_adapters.ifc_len; offset += sizeof(struct ifreq))
{
struct ifreq *network_adapter = reinterpret_cast<struct ifreq *>(network_adapters.ifc_ifcu.ifcu_buf + static_cast<size_t>(offset));
char ip_address[4096];
inet_ntop(AF_INET, &network_adapter->ifr_ifru.ifru_addr, ip_address, 4096);
report.append((format("%1% = %2%\r\n") % network_adapter->ifr_ifrn.ifrn_name % ip_address).str());
}
我希望使用此代码获得 IP4 接口的 name = ip 行,例如:
lo = 127.0.0.1
wlan0 = 192.168.1.132
但是,无论出于何种原因,地址值在 Android 操作系统中始终为 2.0.0.0。
根据netdevice(7),ifreq 结构是可能包含许多不同信息的联合。如何理解(在哪里记录)ifreq 在 Android 上包含哪些具体信息?
【问题讨论】:
标签: android c++ sockets android-ndk