GetAdaptersAddresses() sẽ giúp bạn có địa chỉ ở định dạng IP_ADAPTER_UNICAST_ADDRESS, được định nghĩa là:Nhận IP_ADDRESS_STRING từ GetAdaptersAddresses()?
typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
union {
struct {
ULONG Length;
DWORD Flags;
} ;
} ;
struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
SOCKET_ADDRESS Address;
IP_PREFIX_ORIGIN PrefixOrigin;
IP_SUFFIX_ORIGIN SuffixOrigin;
IP_DAD_STATE DadState;
ULONG ValidLifetime;
ULONG PreferredLifetime;
ULONG LeaseLifetime;
UINT8 OnLinkPrefixLength;
} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
Các lĩnh vực duy nhất mà dường như cho thấy chuỗi địa chỉ IP của con người có thể đọc được là địa chỉ, mà là một cấu trúc SOCKET_ADDRESS định nghĩa là:
typedef struct _SOCKET_ADDRESS {
LPSOCKADDR lpSockaddr;
INT iSockaddrLength;
} SOCKET_ADDRESS, *PSOCKET_ADDRESS;
trong đó, lần lượt, sử dụng một cấu trúc, sockaddr, định nghĩa là:
Xin lỗi, đó là cách để phức tạp để trả lời ở đây, vì nó thay đổi tùy thuộc vào IPv4 vs IPv6 và W edition indows ... vì vậy đây là một liên kết đến định nghĩa:
http://msdn.microsoft.com/en-us/library/ms740496%28v=VS.85%29.aspx
Nếu bạn chưa nhận được chóng mặt nhưng như tôi đã làm và sau đó thông qua mê cung này các định nghĩa, bạn có thể nhận thấy rằng đó là một cơn ác mộng để truy xuất kiểu chuỗi chấm cũ tốt của địa chỉ IP, vì nó được sử dụng dễ dàng hơn nhiều khi sử dụng GetAdaptersInfo().
Câu hỏi của tôi là: Có thực sự chức năng Trình trợ giúp IP có thể chuyển đổi IP_ADAPTER_UNICAST_ADDRESS thành chuỗi chấm IPv4 (hoặc chuỗi IPv6) không?
@Steve, cảm ơn nhưng đây không thực sự là những gì tôi đang tìm kiếm. GetAdaptersAddresses() cung cấp nhiều thông tin hơn nữa - cho cả IPv4 và IPv6 - và tôi muốn tuân thủ theo đề xuất của Microsoft.Tất cả những gì tôi đang thiếu là một chức năng tiện lợi "phiên dịch", có thể lấy IP_ADAPTER_UNICAST_ADDRESS làm tham số và xuất ra một chuỗi. Thay vì tái phát minh ra bánh xe và tự viết nó, có lẽ bạn biết về chức năng hiện tại như vậy? Trong chính API hoặc ở nơi khác, có lẽ một số mẫu? –
@Android Eve - xem chỉnh sửa, bạn có thể sử dụng 'WSAAddressToString' cho việc này. –
Một lần nữa, bạn thể hiện kiến thức ấn tượng về không gian IP Helper của PSDK. Nhờ câu trả lời của bạn, tôi đã có thể phát hiện một vài chức năng liên quan hơn, đặc biệt là RtlIpv4AddressToString() và RtlIpv6AddressToString() mà, không may tồn tại trong WDK, không phải là PSDK. Tôi sẽ đánh dấu câu trả lời của bạn ngay khi được chấp nhận. Trừ khi một câu trả lời mới hơn cho thấy một chức năng làm tương tự cho * cả * IPv6 và IPv4. –