📄 ipconfigv6.cpp
字号:
case 'm':
Flags |= GAA_FLAG_SKIP_MULTICAST;
break;
default:
usage(argv[0]);
break;
}
break;
default:
usage(argv[0]);
break;
}
}
}
//
// Get the main IP configuration information for this machine using a FIXED_INFO structure
//
if ((Err = GetNetworkParams(NULL, &FixedInfoSize)) != 0)
{
if ((Err != ERROR_BUFFER_OVERFLOW) && (Err != ERROR_INSUFFICIENT_BUFFER))
{
printf("GetNetworkParams sizing failed with error %d\n", Err);
return -1;
}
}
// Allocate memory from sizing information
if ((pFixedInfo = (PFIXED_INFO) GlobalAlloc(GPTR, FixedInfoSize)) == NULL)
{
printf("Memory allocation error\n");
return -1;
}
// Print the fixed network parameters
if ((Err = GetNetworkParams(pFixedInfo, &FixedInfoSize)) == 0)
{
printf("\tHost Name . . . . . . . . . : %s\n", pFixedInfo->HostName);
printf("\tDomain Name . . . . . . . . : %s\n", pFixedInfo->DomainName);
printf("\tDNS Servers . . . . . . . . : %s\n", pFixedInfo->DnsServerList.IpAddress.String);
pAddrStr = pFixedInfo->DnsServerList.Next;
while(pAddrStr)
{
printf(" %-15s\n", pAddrStr->IpAddress.String);
pAddrStr = pAddrStr->Next;
}
printf("\tNode Type . . . . . . . . . : ");
switch (pFixedInfo->NodeType)
{
case 1:
printf("%s\n", "Broadcast");
break;
case 2:
printf("%s\n", "Peer to peer");
break;
case 4:
printf("%s\n", "Mixed");
break;
case 8:
printf("%s\n", "Hybrid");
break;
default:
printf("\n");
}
printf("\tNetBIOS Scope ID. . . . . . : %s\n", pFixedInfo->ScopeId);
printf("\tIP Routing Enabled. . . . . : %s\n", (pFixedInfo->EnableRouting ? "yes" : "no"));
printf("\tWINS Proxy Enabled. . . . . : %s\n", (pFixedInfo->EnableProxy ? "yes" : "no"));
printf("\tNetBIOS Resolution Uses DNS : %s\n", (pFixedInfo->EnableDns ? "yes" : "no"));
} else
{
printf("GetNetworkParams failed with error %d\n", Err);
return -1;
}
//
// Enumerate all of the adapter specific information using the
// IP_ADAPTER_ADDRESSES structure.
// Note: IP_ADAPTER_INFO contains a linked list of adapter entries.
//
AdapterAddrsSize = 0;
if ((Err = GetAdaptersAddresses(af, Flags, NULL, NULL, &AdapterAddrsSize)) != 0)
{
if ((Err != ERROR_BUFFER_OVERFLOW) && (Err != ERROR_INSUFFICIENT_BUFFER))
{
printf("GetAdaptersAddresses sizing failed with error %d\n", Err);
printf("err = %d; AdapterAddrsSize = %d\n", Err, AdapterAddrsSize);
return -1;
}
}
// Allocate memory from sizing information
if ((pAdapterAddrs = (PIP_ADAPTER_ADDRESSES) GlobalAlloc(GPTR, AdapterAddrsSize)) == NULL)
{
printf("Memory allocation error\n");
return -1;
}
// Get actual adapter information
if ((Err = GetAdaptersAddresses(af, Flags, NULL, pAdapterAddrs, &AdapterAddrsSize)) != ERROR_SUCCESS)
{
printf("GetAdaptersAddresses failed with error %d\n", Err);
return -1;
}
// Enumerate through each retuned adapter and print its information
pAdapt = pAdapterAddrs;
while (pAdapt)
{
printf("\n");
printf("\tDescription : %S\n", pAdapt->Description);
printf("\t Adapter Name : %s\n", pAdapt->AdapterName);
printf("\t DNS Suffix : %S\n", pAdapt->DnsSuffix);
printf("\t Friendly Name: %S\n", pAdapt->FriendlyName);
FormatPhysicalAddress(pAdapt->PhysicalAddress, pAdapt->PhysicalAddressLength, buf, buflen);
printf("\t Physical Addr: %s\n", buf);
printf("\t MTU . . . . . . . . . . : %d\n", pAdapt->Mtu);
FormatAdapterType(pAdapt->IfType, buf, buflen);
printf("\t Interface Type . . . . : %s\n", buf);
printf("\t Interface Index: . . . : %d\n", pAdapt->IfIndex);
printf("\t Flags: . . . . . . . . : ");
bIndent = FALSE;
if (pAdapt->Flags & IP_ADAPTER_DDNS_ENABLED)
{
printf("DDNS Enabled\n");
bIndent = TRUE;
}
if (pAdapt->Flags & IP_ADAPTER_REGISTER_ADAPTER_SUFFIX)
{
if (bIndent == TRUE)
printf("\t ");
printf("Register DNS Adapter Suffix\n");
bIndent = TRUE;
}
if (pAdapt->Flags & IP_ADAPTER_DHCP_ENABLED)
{
if (bIndent == TRUE)
printf("\t ");
printf("DHCP Enabled\n");
bIndent = TRUE;
}
pUnicastAddress = pAdapt->FirstUnicastAddress;
if (pUnicastAddress)
printf("\t UNICAST ADDRESS(ES):\n");
while (pUnicastAddress)
{
printf("\t Flags: . . . . . . . . : ");
if (pUnicastAddress->Flags == 0)
printf("None");
if ((pUnicastAddress->Flags & IP_ADAPTER_ADDRESS_DNS_ELIGIBLE) == IP_ADAPTER_ADDRESS_DNS_ELIGIBLE)
printf("DNS_ELIGIBLE ");
if ((pUnicastAddress->Flags & IP_ADAPTER_ADDRESS_TRANSIENT) == IP_ADAPTER_ADDRESS_TRANSIENT)
printf("TRANSIENT");
printf("\n");
dwAddressLen = 128;
memset(szAddress, 0, 128);
if (WSAAddressToStringA(
pUnicastAddress->Address.lpSockaddr,
pUnicastAddress->Address.iSockaddrLength,
NULL,
szAddress,
&dwAddressLen) == SOCKET_ERROR)
{
printf("WSAAddressToString failed:% d\n", WSAGetLastError());
}
printf("\t Address: . . . . . . . : %s\n", szAddress);
printf("\t Valid Lifetime . . . . : %lu\n", pUnicastAddress->ValidLifetime);
printf("\t Preferred Lifetime: . . : %lu\n", pUnicastAddress->PreferredLifetime);
printf("\t Lease Lifetime: . . . . : %lu\n", pUnicastAddress->LeaseLifetime);
printf("\t Prefix Origin: . . . . : %s\n", PrefixOriginStr[pUnicastAddress->PrefixOrigin]);
printf("\t Suffix Origin: . . . . : %s\n", SuffixOriginStr[pUnicastAddress->SuffixOrigin]);
printf("\t Dad State: . . . . . . : %s\n", DadStateStr[pUnicastAddress->DadState]);
pUnicastAddress = pUnicastAddress->Next;
printf("\n");
}
//
// Print anycast addresses
//
pAnycastAddress = pAdapt->FirstAnycastAddress;
if (pAnycastAddress)
printf("\t ANYCAST ADDRESS(ES):\n");
while (pAnycastAddress)
{
dwAddressLen = 128;
memset(szAddress, 0, 128);
if (WSAAddressToStringA(
pAnycastAddress->Address.lpSockaddr,
pAnycastAddress->Address.iSockaddrLength,
NULL,
szAddress,
&dwAddressLen) == SOCKET_ERROR)
{
printf("WSAAddressToString failed:% d\n", WSAGetLastError());
}
printf("\t Address: . . . . . . . : %s\n", szAddress);
printf("\t Flags: . . . . . . . . : "); //lu\n", pAnycastAddress->Flags);
if (pAnycastAddress->Flags == 0)
printf("None");
else if ((pAnycastAddress->Flags & IP_ADAPTER_ADDRESS_DNS_ELIGIBLE) == IP_ADAPTER_ADDRESS_DNS_ELIGIBLE)
printf("DNS_ELIGIBLE ");
else if ((pAnycastAddress->Flags & IP_ADAPTER_ADDRESS_TRANSIENT) == IP_ADAPTER_ADDRESS_TRANSIENT)
printf("TRANSIENT");
printf("\n");
pAnycastAddress = pAnycastAddress->Next;
}
//
// Print multicast addresses
//
pMulticastAddress = pAdapt->FirstMulticastAddress;
if (pMulticastAddress)
printf("\t MULTICAST ADDRESS(ES):\n", pAdapt->FirstMulticastAddress);
while (pMulticastAddress)
{
dwAddressLen = 128;
memset(szAddress, 0, 128);
if (WSAAddressToStringA(
pMulticastAddress->Address.lpSockaddr,
pMulticastAddress->Address.iSockaddrLength,
NULL,
szAddress,
&dwAddressLen) == SOCKET_ERROR)
{
printf("WSAAddressToString failed:% d\n", WSAGetLastError());
}
printf("\t Address: . . . . . . . : %s\n", szAddress);
printf("\t Flags: . . . . . . . . : ");
if (pMulticastAddress->Flags == 0)
printf("None");
else if ((pMulticastAddress->Flags & IP_ADAPTER_ADDRESS_DNS_ELIGIBLE) == IP_ADAPTER_ADDRESS_DNS_ELIGIBLE)
printf("DNS_ELIGIBLE ");
else if ((pMulticastAddress->Flags & IP_ADAPTER_ADDRESS_TRANSIENT) == IP_ADAPTER_ADDRESS_TRANSIENT)
printf("TRANSIENT");
printf("\n");
pMulticastAddress = pMulticastAddress->Next;
}
pAdapt = pAdapt->Next;
}
WSACleanup();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -