コード例 #1
0
ファイル: sysnetconfig.c プロジェクト: azalpy/sdk
int system_getdns(const char* name, char primary[40], char secondary[40])
{
	ULONG idx = 0;
	DWORD dwRetVal = 0;
	ULONG outBufLen = 0;
	WCHAR wAdapterName[256] = {0};
	PIP_PER_ADAPTER_INFO pPerAdapterInfo;
	
	MultiByteToWideChar(CP_ACP, 0, name, -1, wAdapterName, 256);
	if(NO_ERROR!=GetAdapterIndex(wAdapterName, &idx))
		return -1;

	outBufLen = sizeof(IP_PER_ADAPTER_INFO);
	pPerAdapterInfo = (PIP_PER_ADAPTER_INFO)malloc(outBufLen);
	if(ERROR_BUFFER_OVERFLOW==GetPerAdapterInfo(idx, pPerAdapterInfo, &outBufLen))
	{
		free(pPerAdapterInfo);
		pPerAdapterInfo = (PIP_PER_ADAPTER_INFO)malloc(outBufLen);
	}

	if ((dwRetVal = GetPerAdapterInfo(idx, pPerAdapterInfo, &outBufLen)) == ERROR_SUCCESS)
	{
		secondary[0] = '\0';
		strncpy(primary, pPerAdapterInfo->DnsServerList.IpAddress.String, 39);
		if(pPerAdapterInfo->DnsServerList.Next)
			strncpy(secondary, pPerAdapterInfo->DnsServerList.Next->IpAddress.String, 39);
	}

	free(pPerAdapterInfo);
	return dwRetVal==ERROR_SUCCESS?0:-(int)dwRetVal;
}
コード例 #2
0
ファイル: GetNetConfig.cpp プロジェクト: k-uno/wakame-vdc
BOOL GetNetConfig::FindDNSAddress(PIP_ADAPTER_INFO pAdapter)
{
	if (pAdapter->Index <= 0) {
		return FALSE;
	}
	ULONG outBufLen = 0;
    GetPerAdapterInfo(pAdapter->Index, NULL, &outBufLen);
	if (outBufLen <= 0) {
		return FALSE;
	}
	IP_PER_ADAPTER_INFO* pPerAdapterInfo = (IP_PER_ADAPTER_INFO*) malloc(outBufLen);
    DWORD dwResult = GetPerAdapterInfo(pAdapter->Index, pPerAdapterInfo, &outBufLen);
	if (dwResult != ERROR_SUCCESS) {
		free(pPerAdapterInfo);
		return FALSE;
	}

	IP_ADDR_STRING* pDns = &pPerAdapterInfo->DnsServerList;

    // loop through all DNS IPs
    while (pDns) {
		if (strcmp(m_szCheck_DNS_Address, pDns->IpAddress.String) == 0) {
			free(pPerAdapterInfo);
			return TRUE;
		}

        pDns = pDns->Next;
	}

	free(pPerAdapterInfo);
	return FALSE;
}
コード例 #3
0
ファイル: GetNetConfig.cpp プロジェクト: k-uno/wakame-vdc
void GetNetConfig::PrintDNSAddress(void)
{
	if ((m_nOptions & pt_dns) != pt_dns) {
		return;
	}

	if (m_pAdapter->Index <= 0) {
		return;
	}
	ULONG outBufLen = 0;
    GetPerAdapterInfo(m_pAdapter->Index, NULL, &outBufLen);
	if (outBufLen <= 0) {
		return;
	}
	IP_PER_ADAPTER_INFO* pPerAdapterInfo = (IP_PER_ADAPTER_INFO*) malloc(outBufLen);
    DWORD dwResult = GetPerAdapterInfo(m_pAdapter->Index, pPerAdapterInfo, &outBufLen);
	if (dwResult != ERROR_SUCCESS) {
		free(pPerAdapterInfo);
		return;
	}

    if (m_bTitle == TRUE) {
	    printf("\tDNS Address: \t");
	}

	IP_ADDR_STRING* pDns = &pPerAdapterInfo->DnsServerList;

    // loop through all DNS IPs
	int i = 0;
    while (pDns) {
		if (i > 0) {
			printf(", ");
		}
		printf("%s",
				pDns->IpAddress.String);

        pDns = pDns->Next;
		i++;
	}
	printf("\n");

	free(pPerAdapterInfo);
}
コード例 #4
0
ファイル: system.cpp プロジェクト: lubing521/important-files
STSysCfgInfo& CSystemInfo::GetSysCfgInfo(SOCKET hSocket)
{
	GetComputerName();
	GetOptSystem();

	//首先取得连接上服务器的socket的本机ip
	stdex::tString     strIP;
	sockaddr_in addr = {0};
	int         nSize = sizeof(addr);

	if (SOCKET_ERROR == getsockname(hSocket, (PSOCKADDR)&addr, &nSize))
		return m_stSysCfgInfo;
	strIP = (LPCTSTR)_bstr_t(inet_ntoa(addr.sin_addr));


	IP_ADAPTER_INFO  Adapter[10] = {0};
	PIP_ADAPTER_INFO pAdapter = Adapter;

	nSize = sizeof(Adapter);
	if (ERROR_SUCCESS != GetAdaptersInfo(Adapter, (PULONG)&nSize))
		pAdapter = NULL;
	while (strIP.size() && pAdapter != NULL)
	{
		_IP_ADDR_STRING* pIpAddress = &pAdapter->IpAddressList;
		while (pIpAddress != NULL)
		{
			if (std::string(CT2A(strIP.c_str())) == pIpAddress->IpAddress.String)
				goto do_next;
			pIpAddress = pIpAddress->Next;
		}
		pAdapter = pAdapter->Next;
	}

do_next:
	if (pAdapter != NULL)
	{
		tstrcpy(m_stCltHardInfo.szNIC, MAX_PATH, CA2T(pAdapter->Description));
		m_stSysCfgInfo.dwIP = inet_addr(CT2A(strIP.c_str()));
		m_stSysCfgInfo.dwGate = inet_addr(pAdapter->GatewayList.IpAddress.String);
		m_stSysCfgInfo.dwSubMask = inet_addr(pAdapter->IpAddressList.IpMask.String);
		tsprintf(m_stSysCfgInfo.szMacAddr, MAX_PATH, TEXT("%02X-%02X-%02X-%02X-%02X-%02X"), 
			pAdapter->Address[0],
			pAdapter->Address[1],
			pAdapter->Address[2],
			pAdapter->Address[3],
			pAdapter->Address[4],
			pAdapter->Address[5]);
		IP_PER_ADAPTER_INFO perAdapter[10] = {0};
		nSize = sizeof(perAdapter);
		if (ERROR_SUCCESS == GetPerAdapterInfo(pAdapter->Index, perAdapter, (PULONG)&nSize))
		{
			m_stSysCfgInfo.dwDns0 = inet_addr(perAdapter->DnsServerList.IpAddress.String);
			if (perAdapter->DnsServerList.Next != NULL)
			{
				m_stSysCfgInfo.dwDns1 = inet_addr(perAdapter->DnsServerList.Next->IpAddress.String);
			}
		}
	}

	return m_stSysCfgInfo;
}
コード例 #5
0
ファイル: lanstatusui.cpp プロジェクト: GYGit/reactos
INT_PTR
CALLBACK
LANStatusUiDetailsDlg(
    HWND hwndDlg,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
)
{
    LANSTATUSUI_CONTEXT * pContext;
    LVITEMW li;
    WCHAR szBuffer[100];
    PIP_ADAPTER_INFO pAdapterInfo, pCurAdapter;
    PIP_PER_ADAPTER_INFO pPerAdapter;
    DWORD dwSize;
    HWND hDlgCtrl;
    RECT rect;

    switch (uMsg)
    {
        case WM_INITDIALOG:
            pContext = (LANSTATUSUI_CONTEXT*)lParam;

            hDlgCtrl = GetDlgItem(hwndDlg, IDC_DETAILS);

            /* get client rect */
            GetClientRect(hDlgCtrl, &rect);

            /* calculate column width */
            dwSize = rect.right / 2;

            InsertColumnToListView(hDlgCtrl, IDS_PROPERTY, 0, dwSize);
            InsertColumnToListView(hDlgCtrl, IDS_VALUE, 1, dwSize);

            dwSize = 0;
            pCurAdapter = NULL;
            pAdapterInfo = NULL;
            if (GetAdaptersInfo(NULL, &dwSize) == ERROR_BUFFER_OVERFLOW)
            {
                pAdapterInfo = static_cast<PIP_ADAPTER_INFO>(CoTaskMemAlloc(dwSize));
                if (pAdapterInfo)
                {
                    if (GetAdaptersInfo(pAdapterInfo, &dwSize) == NO_ERROR)
                    {
                        pCurAdapter = pAdapterInfo;
                        while (pCurAdapter && pCurAdapter->Index != pContext->dwAdapterIndex)
                            pCurAdapter = pCurAdapter->Next;

                        if (pCurAdapter->Index != pContext->dwAdapterIndex)
                            pCurAdapter = NULL;
                    }
                }
            }

            ZeroMemory(&li, sizeof(LVITEMW));
            li.mask = LVIF_TEXT;
            li.iSubItem = 1;
            li.pszText = szBuffer;

            if (pCurAdapter)
            {
                li.iItem = InsertItemToListView(hDlgCtrl, IDS_PHYSICAL_ADDRESS);
                if (li.iItem >= 0)
                {
                    swprintf(szBuffer, L"%02x-%02x-%02x-%02x-%02x-%02x",pCurAdapter->Address[0], pCurAdapter->Address[1],
                             pCurAdapter->Address[2], pCurAdapter->Address[3], pCurAdapter->Address[4], pCurAdapter->Address[5]);
                    SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
                }
                li.iItem = InsertItemToListView(hDlgCtrl, IDS_IP_ADDRESS);
                if (li.iItem >= 0)
                    if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->IpAddressList.IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
                        SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);

                li.iItem = InsertItemToListView(hDlgCtrl, IDS_SUBNET_MASK);
                if (li.iItem >= 0)
                    if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->IpAddressList.IpMask.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
                        SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);

                li.iItem = InsertItemToListView(hDlgCtrl, IDS_DEF_GATEWAY);
                if (li.iItem >= 0 && pCurAdapter->GatewayList.IpAddress.String[0] != '0')
                {
                    if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->GatewayList.IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
                        SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
                }
#if 0
                li.iItem = InsertItemToListView(hDlgCtrl, IDS_LEASE_OBTAINED);
                li.iItem = InsertItemToListView(hDlgCtrl, IDS_LEASE_EXPIRES);
#endif
            }

            dwSize = 0;
            if (GetPerAdapterInfo(pContext->dwAdapterIndex, NULL, &dwSize) == ERROR_BUFFER_OVERFLOW)
            {
                pPerAdapter = static_cast<PIP_PER_ADAPTER_INFO>(CoTaskMemAlloc(dwSize));
                if (pPerAdapter)
                {
                    if (GetPerAdapterInfo(pContext->dwAdapterIndex, pPerAdapter, &dwSize) == ERROR_SUCCESS)
                    {
                        li.iItem = InsertItemToListView(hDlgCtrl, IDS_DNS_SERVERS);
                        if (li.iItem >= 0)
                            AddIPAddressToListView(hDlgCtrl, &pPerAdapter->DnsServerList, li.iItem);
                    }
                    CoTaskMemFree(pPerAdapter);
                }
            }
#if 0
            if (pCurAdapter)
            {
                li.iItem = InsertItemToListView(hDlgCtrl, IDS_WINS_SERVERS);
                AddIPAddressToListView(hDlgCtrl, &pCurAdapter->PrimaryWinsServer, li.iItem);
                AddIPAddressToListView(hDlgCtrl, &pCurAdapter->SecondaryWinsServer, li.iItem+1);
            }
#endif
            CoTaskMemFree(pAdapterInfo);
            break;
        case WM_COMMAND:
            if (LOWORD(wParam) == IDC_CLOSE)
            {
                EndDialog(hwndDlg, FALSE);
                break;
            }
    }
    return FALSE;
}
コード例 #6
0
ファイル: AdaptInfoDlg.cpp プロジェクト: yangyang0312/C-
void CAdaptInfoDlg::ShowAdaptersInfo()
{
	PIP_ADAPTER_INFO pAdapterInfo;
	PIP_ADAPTER_INFO pAdapter = NULL;
	DWORD errValue = 0;
	ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
	pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
	if (!pAdapterInfo)//malloc失败
		return;
	if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) //空间不够,重新分配
	{
		free(pAdapterInfo);
		pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
		if (!pAdapterInfo) //malloc失败
			return;
	}
	CString info;
	if ((errValue = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
	{
		pAdapter = pAdapterInfo;
		while (pAdapter)
		{
			info += CString(_T("Adapter Name:")) + CString(pAdapter->AdapterName) + CString(_T("\r\n"));//名字
			info += CString(_T("Adapter Desc:")) + CString(pAdapter->Description) + CString(_T("\r\n"));//描述
			CString mac;
			mac.Format(_T("%02X%02X%02X%02X%02X%02X"), pAdapter->Address[0], pAdapter->Address[1], \
				pAdapter->Address[2], pAdapter->Address[3], pAdapter->Address[4], pAdapter->Address[5]);
			info += CString(_T("Adapter Mac:")) + mac + CString(_T("\r\n"));//MAC地址
			CString type;
			switch (pAdapter->Type) //类型,列举了几种
			{
			case MIB_IF_TYPE_OTHER:
				type = _T("其他");
				break;
			case MIB_IF_TYPE_ETHERNET:
				type = _T("以太网接口");
				break;
			case IF_TYPE_ISO88025_TOKENRING:
				type = _T("ISO88025令牌环");
				break;
			case MIB_IF_TYPE_PPP:
				type = _T("PPP接口");
				break;
			case MIB_IF_TYPE_LOOPBACK:
				type = _T("软件回路接口");
				break;
			case MIB_IF_TYPE_SLIP:
				type = _T("ATM网络接口");
				break;
			case IF_TYPE_IEEE80211:
				type = _T("无线网络接口");
				break;
			default:
				type = _T("未知接口");
				break;
			}
			info += CString(_T("网卡类型:")) + type + CString(_T("\r\n"));
			info += CString(_T("IP地址:")) + CString(pAdapter->IpAddressList.IpAddress.String) + CString(_T("\r\n"));
			info += CString(_T("子网掩码:")) + CString(pAdapter->IpAddressList.IpMask.String) + CString(_T("\r\n"));
			info += CString(_T("默认网关:")) + CString(pAdapter->GatewayList.IpAddress.String) + CString(_T("\r\n"));
			info += CString(_T("是否DHCP:")) + CString(pAdapter->DhcpEnabled ? _T("是") : _T("否")) + CString(_T("\r\n"));
			info += CString(_T("DHCP地址:")) + CString(pAdapter->DhcpServer.IpAddress.String) + CString(_T("\r\n"));
			//Dns
			IP_PER_ADAPTER_INFO* pPerAdapt = NULL;
			ULONG ulLen = 0;
			int err = GetPerAdapterInfo(pAdapter->Index, pPerAdapt, &ulLen);
			if (err == ERROR_BUFFER_OVERFLOW)
			{
				pPerAdapt = (IP_PER_ADAPTER_INFO*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ulLen);
				err = GetPerAdapterInfo(pAdapter->Index, pPerAdapt, &ulLen);
				if (err == ERROR_SUCCESS)
				{
					IP_ADDR_STRING* pNext = &(pPerAdapt->DnsServerList);
					if (pNext && strcmp(pNext->IpAddress.String, "") != 0)//手动DNS
					{
						info = info + CString(_T("DNS:")) + CString(pNext->IpAddress.String) + _T("\r\n");
						if (pNext->Next)
						{
							pNext = pNext->Next;
							info = info + CString(_T("备用DNS:")) + CString(pNext->IpAddress.String) + _T("\r\n");
						}
					}
				}
				HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, pPerAdapt);
			}
			info += "\r\n";
			pAdapter = pAdapter->Next;
		}
	}
	else
	{
		CString s;
		s.Format(_T("GetAdaptersInfo failed with error: %d\r\n"), errValue);
		info += s;
	}
	if (pAdapterInfo)
		free(pAdapterInfo);
	SetDlgItemText(IDC_EDIT, info);
}
コード例 #7
0
ファイル: cmnutils.cpp プロジェクト: NemProjects/WLAN
IPSTATE GetIPState(LPCTSTR pszAdapter, LPTSTR pszAddress, UINT cchAddress)
{
    HRESULT              hr = S_OK;
    IPSTATE              state = IPSTATE_DHCP;
    ULONG                ulAdapterIndex;
    PIP_ADAPTER_INFO     paiBuffer = NULL;
    ULONG                cbBuffer = 0;
    DWORD                dwError;
    PIP_ADAPTER_INFO     paiCurrent;
    PIP_PER_ADAPTER_INFO pper = NULL;

    // Check inputs
    CBRAEx(NULL != pszAdapter, E_INVALIDARG);

    // Get the adapter index
    CBR(NO_ERROR == GetAdapterIndex(const_cast<LPWSTR>(pszAdapter), &ulAdapterIndex));

    // Get the status of all connected adapters
    cbBuffer = sizeof(IP_ADAPTER_INFO);
    paiBuffer = (PIP_ADAPTER_INFO)LocalAlloc(LMEM_FIXED, cbBuffer);
    CPR(paiBuffer);

    while (ERROR_BUFFER_OVERFLOW == (dwError = GetAdaptersInfo(paiBuffer, &cbBuffer)))
    {
        PIP_ADAPTER_INFO paiTemp = (PIP_ADAPTER_INFO)LocalReAlloc(paiBuffer, cbBuffer, LMEM_MOVEABLE);
        CPR(paiTemp);
        paiBuffer = paiTemp;
    }

    CBR(NO_ERROR == dwError);

    // Find our adapter index
    for (paiCurrent = paiBuffer; paiCurrent; paiCurrent = paiCurrent->Next)
    {
        if (paiCurrent->Index == ulAdapterIndex)
        {
            break;
        }
    }

    CBR(NULL != paiCurrent);  // did we find it?
    CBR(NULL != paiCurrent->CurrentIpAddress);

    // Is this adapter using DHCP?
    if (!paiCurrent->DhcpEnabled)
    {
        state = IPSTATE_CONNECTED;
    }
    else
    {
        // Get the per-adapter info
        cbBuffer = sizeof(IP_PER_ADAPTER_INFO);
        pper = (PIP_PER_ADAPTER_INFO)LocalAlloc(LMEM_FIXED, cbBuffer);
        CPR(pper);

        while (ERROR_BUFFER_OVERFLOW == (dwError = GetPerAdapterInfo(ulAdapterIndex, pper, &cbBuffer)))
        {
            PIP_PER_ADAPTER_INFO pperTemp = (PIP_PER_ADAPTER_INFO)LocalReAlloc(pper, cbBuffer, LMEM_MOVEABLE);
            CPR(pperTemp);
            pper = pperTemp;
        }

        CBR(NO_ERROR == dwError);

        // Are we using an automatic IP?
        if (pper->AutoconfigActive || IsAutoIPAddr(paiCurrent->CurrentIpAddress->IpAddress.String))
        {
            state = IPSTATE_AUTOIP;
        }
    }

    // Optionally copy the IP address string to the output
    if (NULL != pszAddress && 0 != cchAddress)
    {
        UINT cchInput = strlen(paiCurrent->CurrentIpAddress->IpAddress.String);
        if (cchInput >= cchAddress)
        {
            cchInput = cchAddress - 1;
        }

        MultiByteToWideChar(CP_ACP, 0,
            paiCurrent->CurrentIpAddress->IpAddress.String, cchInput,
            pszAddress, cchAddress);
        pszAddress[cchAddress-1] = TEXT('\0');
    }

Error:
    LocalFree(pper);
    LocalFree(paiBuffer);
    return (SUCCEEDED(hr) ? state : IPSTATE_DISCONNECTED);
}