Я знаю индекс сетевого интерфейса, возвращаемый WinAPI GetBestInterface
. Как получить свойства интерфейса (адрес IPv4) на основе индекса интерфейса?
Вот рабочий код C ++, но он мне нужен в C #.
PMIB_IPADDRTABLE pAddrTable;
PMIB_IPADDRROW pAddrRow;
in_addr ia;
CBasePage::OnSetActive();
m_edit1.SetFont(&m_font);
m_edit1.SetWindowText("");
GetIpAddrTable((PMIB_IPADDRTABLE) m_pBuffer, &m_ulSize, TRUE);
m_pBuffer = new BYTE[m_ulSize];
if (NULL != m_pBuffer)
{
m_dwResult = GetIpAddrTable((PMIB_IPADDRTABLE) m_pBuffer, &m_ulSize, TRUE);
if (m_dwResult == NO_ERROR)
{
pAddrTable = (PMIB_IPADDRTABLE) m_pBuffer;
for (int x = 0; x < pAddrTable->dwNumEntries; x++)
{
pAddrRow = (PMIB_IPADDRROW) &(pAddrTable->table[x]);
ia.S_un.S_addr = pAddrRow->dwAddr;
m_strText.Format(" IP address: %s\r\n", inet_ntoa(ia));
m_edit1.ReplaceSel(m_strText);
m_strText.Format(" Interface index: %lu\r\n", pAddrRow->dwIndex);
m_edit1.ReplaceSel(m_strText);
ia.S_un.S_addr = pAddrRow->dwMask;
m_strText.Format(" Subnet mask: %s\r\n", inet_ntoa(ia));
m_edit1.ReplaceSel(m_strText);
ia.S_un.S_addr = pAddrRow->dwBCastAddr;
m_strText.Format("Broadcast address: %s\r\n", inet_ntoa(ia));
m_edit1.ReplaceSel(m_strText);
m_edit1.ReplaceSel("\r\n");
}
}
else
{
m_strText.Format("GetIpAddrTable() failed. Result = %lu\r\n", m_dwResult);
m_edit1.ReplaceSel(m_strText);
}
delete [] m_pBuffer;
}
Я попробовал пример на pinvoke , но он возвращает 0.0.0.0
для всех интерфейсов.