怎么获得网卡MAC地址 如果是多网卡的电脑,怎么获得正在使用的那个网卡的MAC地址是???请大虾指点啊~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/t/20031009/14/2336961.html #include "winsock.h" #include <stdio.h>#include <iphlpapi.h>#pragma comment(lib,"iphlpapi.lib")void main(){ IP_ADAPTER_INFO Interface[20]; PIP_ADAPTER_INFO NetInterface = NULL; DWORD Result = 0; unsigned long Length = sizeof(Interface); Result = GetAdaptersInfo(Interface, &Length); if (Result != NO_ERROR) { printf("GetAdaptersInfo failed error.\n"); } else { NetInterface = Interface; while (NetInterface) { static int number; number++; printf("第%d个网络接口信息:\n", number); printf("名称:%s\n", NetInterface->AdapterName); printf("信息:%s\n", NetInterface->Description); printf("地址:%ld\n", NetInterface->Address); printf("MAC地址:%02X:%02X:%02X:%02X:%02X:%02X\n", NetInterface->Address[0], NetInterface->Address[1], NetInterface->Address[2], NetInterface->Address[3], NetInterface->Address[4], NetInterface->Address[5]); printf("IP地址:%s\n", NetInterface->IpAddressList.IpAddress.String); printf("IP地址掩码:%s\n", NetInterface->IpAddressList.IpMask.String); printf("网关:%s\n", NetInterface->GatewayList.IpAddress.String); if (NetInterface->DhcpEnabled) { printf("DHCP配置:\n"); printf("服务器:%s\n", NetInterface->DhcpServer.IpAddress.String); printf("租用:%ld\n", NetInterface->LeaseObtained); } else printf("无DHCP配置\n"); if (NetInterface->HaveWins) { printf("Wins配置:\n"); printf("主Wins服务器:%s\n", NetInterface->PrimaryWinsServer.IpAddress.String); printf("次Wins服务器:%s\n", NetInterface->SecondaryWinsServer.IpAddress.String); } else printf("无服务器配置\n"); NetInterface = NetInterface->Next; } }} 再来一个:#include <winsock2.h>#include <ws2tcpip.h> #include <stdio.h>#pragma comment(lib,"Ws2_32.lib")int main(){ WSADATA wsaData; SOCKET sock; INTERFACE_INFO netinterface[10]; DWORD dwBytesReturned; int InterfaceCount; int Result; Result = WSAStartup(MAKEWORD(2, 1), &wsaData); if (Result == SOCKET_ERROR) { printf("WSAStartup failed with error %d\n", Result); return 1; } //sock = WSASocket(AF_INET, SOCK_DGRAM, 0, 0, 0, 0); sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock == INVALID_SOCKET) { printf("WSASocket failed with error %d\n\n", WSAGetLastError()); return 1; } Result = WSAIoctl(sock, SIO_GET_INTERFACE_LIST, 0, 0, &netinterface, sizeof(netinterface), &dwBytesReturned, 0, 0); if (Result == SOCKET_ERROR) { printf("WSAIoctl failed with error %d \n", WSAGetLastError()); return 1; } InterfaceCount = dwBytesReturned / sizeof(INTERFACE_INFO); printf("网络接口个数:%d\n", InterfaceCount); for (int i = 0; i < InterfaceCount; i++) { printf("\n第%d个网络接口:\n", i + 1); printf("IP地址为:%s\n", inet_ntoa(netinterface[i].iiAddress.AddressIn .sin_addr)); printf("广播地址为:%s\n", inet_ntoa(netinterface[i].iiBroadcastAddress .AddressIn .sin_addr)); printf("子网掩码为:%s\n", inet_ntoa(netinterface[i].iiNetmask .AddressIn .sin_addr)); if (netinterface[i].iiFlags &IFF_POINTTOPOINT) printf("Point to Point网络接口\n"); if (netinterface[i].iiFlags &IFF_LOOPBACK) printf("回环接口\n"); if (netinterface[i].iiFlags &IFF_BROADCAST) printf("支持广播\n"); if (netinterface[i].iiFlags &IFF_MULTICAST) printf("支持多播\n"); if (netinterface[i].iiFlags &IFF_UP) printf("接口状态:UP\n"); else printf("接口状态:DOWN\n"); } if (WSACleanup() == SOCKET_ERROR) { printf("WSACleanup failed with error %d\n", WSAGetLastError()); return 1; } return 0;} 继续:#include "winsock.h" #include <stdio.h>#pragma comment(lib,"Ws2_32.lib")void main(){ WSADATA wsaData; char HostName[255]; HOSTENT *Hostent; int Result; Result = WSAStartup(MAKEWORD(2, 1), &wsaData); if (Result == SOCKET_ERROR) { printf("WSAStartup failed with error %d\n", Result); return ; } Result = gethostname(HostName, 255); printf("主机名称为:%s\n", HostName); if (Result == SOCKET_ERROR) { printf("gethostname failed with error %d\n", WSAGetLastError()); return ; } Hostent = (struct hostent*)malloc(sizeof(struct hostent)); Hostent = gethostbyname(HostName); for (int i = 0;; i++) { if(!Hostent->h_addr_list[i])//rendb add break; printf("第%d个网络接口:\n", i + 1); printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)(Hostent->h_addr_list[i]))); /*if (Hostent->h_addr_list[i] + Hostent->h_length >= Hostent->h_name) { break; } */ //very bad!!! confused and error oriented } //WSASocket i=0;//rendb add char **ptr=Hostent->h_addr_list; for(; ptr[i];i++) { printf("\n\n 2第%d个网络接口:\n", i ); printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)ptr[i])); } if (WSACleanup() == SOCKET_ERROR) { printf("WSACleanup failed with error %d\n", WSAGetLastError()); return ; }} 额、、囧。。看错了,是MAC地址、、 在CMD下nbtstat -an 对方IP 可获取对方机子的登录名和MAC地址在MFC需要下转化一下 所谓“正在使用”是对于某个特定目的主机而言的。比如两个网卡连接两个局域网。用tracert命令可以知道对方数据从哪个网段来,间接判断。如果两个网卡在一个局域网...谁知道哪块“正在使用”... 纪念77事变。毋忘国耻 急-离奇问题:一个关于数据库、线程和非模态对话框的程序问题!!! 向各位大哥请求group by算法 工具栏上显示文本不正常 C#中如何获得文件的8.3文件名? 这个问题问了好多次,怎么没有人回答啊! 通过程序员考试,下半期准备冲刺软件设计师,放分为自己加油! 祝jennyvenus新年快乐... 高手请帮忙!!!急!! 链表归档问题,比较简单,来者有分!! 关于shellexecute的问题 串口操作类
#include <stdio.h>
#include <iphlpapi.h>
#pragma comment(lib,"iphlpapi.lib")
void main()
{
IP_ADAPTER_INFO Interface[20];
PIP_ADAPTER_INFO NetInterface = NULL;
DWORD Result = 0;
unsigned long Length = sizeof(Interface);
Result = GetAdaptersInfo(Interface, &Length);
if (Result != NO_ERROR)
{
printf("GetAdaptersInfo failed error.\n");
}
else
{
NetInterface = Interface;
while (NetInterface)
{
static int number;
number++;
printf("第%d个网络接口信息:\n", number);
printf("名称:%s\n", NetInterface->AdapterName);
printf("信息:%s\n", NetInterface->Description);
printf("地址:%ld\n", NetInterface->Address);
printf("MAC地址:%02X:%02X:%02X:%02X:%02X:%02X\n", NetInterface->Address[0], NetInterface->Address[1], NetInterface->Address[2], NetInterface->Address[3], NetInterface->Address[4], NetInterface->Address[5]);
printf("IP地址:%s\n", NetInterface->IpAddressList.IpAddress.String);
printf("IP地址掩码:%s\n", NetInterface->IpAddressList.IpMask.String);
printf("网关:%s\n", NetInterface->GatewayList.IpAddress.String);
if (NetInterface->DhcpEnabled)
{
printf("DHCP配置:\n");
printf("服务器:%s\n", NetInterface->DhcpServer.IpAddress.String);
printf("租用:%ld\n", NetInterface->LeaseObtained);
}
else
printf("无DHCP配置\n");
if (NetInterface->HaveWins)
{
printf("Wins配置:\n");
printf("主Wins服务器:%s\n", NetInterface->PrimaryWinsServer.IpAddress.String);
printf("次Wins服务器:%s\n", NetInterface->SecondaryWinsServer.IpAddress.String);
}
else
printf("无服务器配置\n");
NetInterface = NetInterface->Next;
}
}
}
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#pragma comment(lib,"Ws2_32.lib")
int main()
{
WSADATA wsaData;
SOCKET sock;
INTERFACE_INFO netinterface[10];
DWORD dwBytesReturned;
int InterfaceCount;
int Result;
Result = WSAStartup(MAKEWORD(2, 1), &wsaData);
if (Result == SOCKET_ERROR)
{
printf("WSAStartup failed with error %d\n", Result);
return 1;
}
//sock = WSASocket(AF_INET, SOCK_DGRAM, 0, 0, 0, 0);
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == INVALID_SOCKET)
{
printf("WSASocket failed with error %d\n\n", WSAGetLastError());
return 1;
}
Result = WSAIoctl(sock, SIO_GET_INTERFACE_LIST, 0, 0, &netinterface, sizeof(netinterface), &dwBytesReturned, 0, 0);
if (Result == SOCKET_ERROR)
{
printf("WSAIoctl failed with error %d \n", WSAGetLastError());
return 1;
}
InterfaceCount = dwBytesReturned / sizeof(INTERFACE_INFO);
printf("网络接口个数:%d\n", InterfaceCount);
for (int i = 0; i < InterfaceCount; i++)
{
printf("\n第%d个网络接口:\n", i + 1);
printf("IP地址为:%s\n", inet_ntoa(netinterface[i].iiAddress.AddressIn .sin_addr));
printf("广播地址为:%s\n", inet_ntoa(netinterface[i].iiBroadcastAddress .AddressIn .sin_addr));
printf("子网掩码为:%s\n", inet_ntoa(netinterface[i].iiNetmask .AddressIn .sin_addr));
if (netinterface[i].iiFlags &IFF_POINTTOPOINT)
printf("Point to Point网络接口\n");
if (netinterface[i].iiFlags &IFF_LOOPBACK)
printf("回环接口\n");
if (netinterface[i].iiFlags &IFF_BROADCAST)
printf("支持广播\n");
if (netinterface[i].iiFlags &IFF_MULTICAST)
printf("支持多播\n");
if (netinterface[i].iiFlags &IFF_UP)
printf("接口状态:UP\n");
else
printf("接口状态:DOWN\n");
}
if (WSACleanup() == SOCKET_ERROR)
{
printf("WSACleanup failed with error %d\n", WSAGetLastError());
return 1;
}
return 0;
}
#include "winsock.h"
#include <stdio.h>
#pragma comment(lib,"Ws2_32.lib")
void main()
{
WSADATA wsaData;
char HostName[255];
HOSTENT *Hostent;
int Result;
Result = WSAStartup(MAKEWORD(2, 1), &wsaData);
if (Result == SOCKET_ERROR)
{
printf("WSAStartup failed with error %d\n", Result);
return ;
}
Result = gethostname(HostName, 255);
printf("主机名称为:%s\n", HostName);
if (Result == SOCKET_ERROR)
{
printf("gethostname failed with error %d\n", WSAGetLastError());
return ;
}
Hostent = (struct hostent*)malloc(sizeof(struct hostent));
Hostent = gethostbyname(HostName); for (int i = 0;; i++)
{
if(!Hostent->h_addr_list[i])//rendb add
break;
printf("第%d个网络接口:\n", i + 1);
printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)(Hostent->h_addr_list[i])));
/*if (Hostent->h_addr_list[i] + Hostent->h_length >= Hostent->h_name)
{
break;
} */ //very bad!!! confused and error oriented
}
//WSASocket
i=0;//rendb add
char **ptr=Hostent->h_addr_list;
for(; ptr[i];i++)
{
printf("\n\n 2第%d个网络接口:\n", i );
printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)ptr[i]));
}
if (WSACleanup() == SOCKET_ERROR)
{
printf("WSACleanup failed with error %d\n", WSAGetLastError());
return ;
}
}
nbtstat -an 对方IP 可获取对方机子的登录名和MAC地址在MFC需要下转化一下
用tracert命令可以知道对方数据从哪个网段来,间接判断。
如果两个网卡在一个局域网...谁知道哪块“正在使用”...