IPv4 주소가 주어지면 C++을 사용하는 Windows에서 "이더넷 어댑터 로컬 영역 연결"과 같은 관련 네트워크 인터페이스 이름을 얻는 방법은 무엇입니까? 또는 로컬 컴퓨터의 네트워크 인터페이스 이름과 IPv4 주소 목록을 얻는 방법은 무엇입니까? 나는 getaddrinfo
과 inet_ntoa
을 사용하는 IPv4 주소 만 얻을 수있다.IPv4 주소에서 네트워크 인터페이스 이름 가져 오기
2
A
답변
9
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "iphlpapi.lib")
int
main(int argc, char** argv) {
PIP_ADAPTER_INFO pAdapterInfo;
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
ULONG buflen = sizeof(IP_ADAPTER_INFO);
if(GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(buflen);
}
if(GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) {
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while (pAdapter) {
printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
printf("\tAdapter Addr: \t%ld\n", pAdapter->Address);
printf("\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
if(pAdapter->DhcpEnabled) {
printf("\tDHCP Enabled: Yes\n");
printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
printf("\tLease Obtained: %ld\n", pAdapter->LeaseObtained);
} else {
printf("\tDHCP Enabled: No\n");
}
if(pAdapter->HaveWins) {
printf("\tHave Wins: Yes\n");
printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
} else {
printf("\tHave Wins: No\n");
}
pAdapter = pAdapter->Next;
}
} else {
printf("Call to GetAdaptersInfo failed.\n");
}
}
5
나뿐만 아니라 내 최소한의 버전을 공유 할 수 있습니다 :
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "iphlpapi.lib")
int main() {
ULONG buflen = sizeof(IP_ADAPTER_INFO);
IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);
if (GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);
}
if (GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) {
for (IP_ADAPTER_INFO *pAdapter = pAdapterInfo; pAdapter; pAdapter = pAdapter->Next) {
printf("%s (%s)\n", pAdapter->IpAddressList.IpAddress.String, pAdapter->Description);
}
}
if (pAdapterInfo) free(pAdapterInfo);
return 0;
}
관련 문제
- 1. Go에있는 IP 주소에서 도메인 이름 가져 오기
- 2. 함수 주소에서 함수 이름 가져 오기
- 3. IP 주소에서 호스트 이름 가져 오기
- 4. wifi 네트워크 인터페이스 이름
- 5. Windows 네트워크에서 네트워크 사용자 이름 가져 오기
- 6. 내 네트워크 환경에서 컴퓨터 이름 가져 오기
- 7. Delphi에서 네트워크 공유의 로컬 이름 가져 오기
- 8. 값을 사용하여 인터페이스 상수 이름 가져 오기
- 9. Android 기기의 네트워크 인터페이스 이름
- 10. 하나의 명령으로 IPv4 및 IPv6 가져 오기
- 11. IP 주소에서 geolocation 가져 오기
- 12. IPv4 매핑 된 IPv6 주소에서 IPv4 주소를 확인하는 방법은 무엇입니까?
- 13. 주어진 IPv4 매핑 된 IPv6 주소에서 IPv4 주소를 추출하려고 시도합니다.
- 14. JAVA를 사용하여 네트워크의 IP 주소에서 호스트 이름 가져 오기
- 15. ipv4 주소에서 도메인 이름을 찾을 수
- 16. iOS 응용 프로그램에서 네트워크 유형 가져 오기
- 17. 인터페이스 주소 가져 오기 및 설정
- 18. GetPropValue에서 인터페이스 가져 오기
- 19. JPA 인터페이스 가져 오기
- 20. 웹 서비스 끝점 주소에서 WSDL 가져 오기
- 21. googles geolocation없이 주소에서 위도/경도 가져 오기
- 22. 메모리 주소에서 소유자 모듈 가져 오기
- 23. 메모리 주소에서 스레드 핸들 가져 오기
- 24. 빙지도 Ajax API - 주소에서 주소 가져 오기
- 25. C 프로그램에서 리눅스의 IPv6 주소에서 네트워크 인터페이스 이름을 얻는 방법은 무엇입니까?
- 26. IP에서 클라이언트 컴퓨터 이름 가져 오기
- 27. Powershell을 사용하여 네트워크 폴더에서 파일 이름 만 가져 오기
- 28. 리눅스 쉘 스크립트 변수에 인터페이스 이름 가져 오기
- 29. 네트워크 컴퓨터 가져 오기 System.Environment.TickCount
- 30. C에서 네트워크 사용률 가져 오기
는 플랫폼에 따라 달라집니다. 예를 들어, Windows에서는 GetAdaptersInfo를 사용해야합니다. – mattn
@mattn GetAdaptersInfo에 대한 설명서에 XP 이상에서 GetAdaptersAddresses를 사용한다고 나와 있습니다. 이것이 선호됩니까? –
예, XP 이상에서 작동하도록하려면 GetAdaptersAddresses를 사용하는 것이 좋습니다. – mattn