30. april 2003 - 20:41
Der er
5 kommentarer og
1 løsning
Få fat i IP adresse i MFC
Hvordan kan jeg på en simpel må få fat i ip-adressen ved brug af MFC? Synes kun at kunne finde temmelig gamle metoder skrevet i C. Det må da kunne gøres mere simpelt?
30. april 2003 - 21:11
#1
Jeg har noget relativt simpelt kode som skaffer info om hver adapter på PC'en, det er ikke MFC, men jeg vil tro det er nemt at sætte ind (jeg er ikke selv "MFC mand")..
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
int main(int argc, char *argv)
{
IP_ADAPTER_INFO AdapterInfo[16];
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen);
IP_ADAPTER_INFO *pAdapterInfo = AdapterInfo;
FIXED_INFO AdapterFixedInfo[16];
DWORD dwLen = sizeof(AdapterFixedInfo);
GetNetworkParams(AdapterFixedInfo, &dwLen);
FIXED_INFO *pAdapterFixedInfo = AdapterFixedInfo;
IP_ADDR_STRING *dnsList;
do
{
printf("<adapter>\n");
printf("\t<name>%s</name>\n", pAdapterInfo->Description);
printf("\t<ip>%s</ip>\n", pAdapterInfo->IpAddressList.IpAddress.String);
printf("\t<subnet>%s</subnet>\n", pAdapterInfo->IpAddressList.IpMask.String);
BYTE mac[8];
mac = pAdapterInfo->Address;
char macaddr[32] = "";
sprintf(macaddr, "%02x-%02x-%02x-%02x-%02x-%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
printf("\t<mac>%s</mac>\n", macaddr);
printf("</adapter>\n");
pAdapterInfo = pAdapterInfo->Next;
}
while(pAdapterInfo);
return 0;
}
Output hos mig:
<adapter>
<name>D-Link DFE-538TX 10/100 Adapter</name>
<ip>212.10.185.186</ip>
<subnet>255.255.240.0</subnet>
<mac>00-50-ba-4a-cb-12</mac>
</adapter>
Jeg har lavet følgende funktion, der udfylder 2 CString members kaldet m_pc_name og m_ip_address:
(du skal linke med ws2_32.lib)
int CNetInfoDlg::GetNameAndIp()
{
WSAData wsaData;
WSAStartup(MAKEWORD(1, 1), &wsaData);
char ac[80];
if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR)
{
cerr << "Error " << WSAGetLastError() <<
" when getting local host name." << endl;
WSACleanup();
return 1;
}
m_pc_name = ": ";
m_pc_name += ac;
struct hostent* phe = gethostbyname(ac);
if (phe == 0) {
cerr << "Yow! Bad host lookup." << endl;
WSACleanup();
return 1;
}
for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
struct in_addr addr;
memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
m_ip_address = i + ": ";
m_ip_address += inet_ntoa(addr);
}
WSACleanup();
return 0;
}