네트워크(NIC) 사용/사용해제 하기

컴퓨터에서 인터넷을 차단하려면 두가지 방법이 있습니다. 첫번째는 랜선을 뽑는 방법이 있겠고, 두번째는 제어판에 들어가 네트워크 장치를 사용안함으로 설정하는 것입니다.

지금부터 소개해드리는 방법은 프로그램에서 네트워크 장치를 사용/사용안함 처리 할 수 있는 방법입니다. 전문용어로는 "NIC의 Enable / Disable 기능 구현" 쯤으로 부를 수 있을 것 같습니다.

소스코드를 한줄한줄 설명하기 위해서는 기반 지식을 먼저 소개해드려야 하기때문에 지금은 코드만 소개해 드리겠습니다. 쉬운 코드이니, 콘솔 프로젝트 생성하셔서 소스 붙여넣기 하시고, 실행하면서 Break point 걸면서 확인해보시면 바로 응용해서 사용하실 수 있을 것같습니다.


#include<windows.h>
#include<netcon.h>
#include<iostream>
#include<string>
 
using namespace std;
 
BOOL IsConnection();
int Connect();
 
int main()
{
    int hr = 0;
 
    if(IsConnection()){
        // 연결이 되어있는 상태입니다.
        cout << "현재 네트워크 카드의 드라이브는 사용중입니다." << endl;
        cout << "연결 해제합니다.";
    }else{
        // 연결이 되어있지 않으니 연결합니다.
        cout << "현재 네트워크 카드의 드라이브는 사용중지된 상태입니다." << endl;
        cout << "연결 합니다. : ";
    }
    hr = Connect();
 
    if(hr==0){
        cout << "네트워크 카드의 연결이 해제되었습니다." << endl;
    }else if(hr == 1){
        cout << "네트워크 카드가 연결되었습니다." << endl;
    }
    return 0;
}
 
BOOL IsConnection(){
    int status = FALSE; //1:connect, 0:disconnect
    HRESULT result = 0;
 
    CoInitialize(0);
 
    INetConnectionManager *pMan = 0;
    HRESULT hres = CoCreateInstance(CLSID_ConnectionManager,
                                                        0,
                                                        CLSCTX_ALL,
                                                        __uuidof(INetConnectionManager),
                                                        (void**)&pMan);
 
    if (SUCCEEDED(hres))
    {
        IEnumNetConnection *pEnum = 0;
        hres = pMan->EnumConnections(NCME_DEFAULT, &pEnum);
        if (SUCCEEDED(hres))
        {
            INetConnection *pCon = 0;
            ULONG count;
            while (pEnum->Next(1, &pCon, &count) == S_OK )
            {
                NETCON_PROPERTIES *pProps = 0;
                hres = pCon->GetProperties(&pProps);
                if (SUCCEEDED(hres))
                {
                    if (pProps->Status == NCS_DISCONNECTED){
                        status = FALSE;
                    }
                    else if (pProps->Status == NCS_CONNECTED){
                        status = TRUE;
                    }
 
                    if (pProps)
                    {
                        CoTaskMemFree(pProps->pszwName);
                        CoTaskMemFree(pProps->pszwDeviceName);
                        CoTaskMemFree(pProps);
                    }
                }
                pCon->Release();
            }
            pEnum->Release();
        }
        pMan->Release();
    }
 
    CoUninitialize();
    return status;
}
 
int Connect(){
    int status = 0; //1:connect, 0:disconnect
    HRESULT result = 0;
 
    CoInitialize(0);
 
    INetConnectionManager *pMan = 0;
    HRESULT hres = CoCreateInstance(CLSID_ConnectionManager,
                                                        0,
                                                        CLSCTX_ALL,
                                                        __uuidof(INetConnectionManager),
                                                        (void**)&pMan);
 
    if (SUCCEEDED(hres))
    {
        IEnumNetConnection *pEnum = 0;
        hres = pMan->EnumConnections(NCME_DEFAULT, &pEnum);
        if (SUCCEEDED(hres))
        {
            INetConnection *pCon = 0;
            ULONG count;
            while (pEnum->Next(1, &pCon, &count) == S_OK)
            {
                NETCON_PROPERTIES *pProps = 0;
                hres = pCon->GetProperties(&pProps);
                if (SUCCEEDED(hres))
                {
                    if (pProps->Status == NCS_DISCONNECTED){
                        result = pCon->Connect();
                        status = 1;
                    }
                    else if (pProps->Status == NCS_CONNECTED){
                        result = pCon->Disconnect();
                        status = 0;
                    }
 
                    if (pProps)
                    {
                        CoTaskMemFree(pProps->pszwName);
                        CoTaskMemFree(pProps->pszwDeviceName);
                        CoTaskMemFree(pProps);
                    }
                }
                pCon->Release();
            }
            pEnum->Release();
        }
        pMan->Release();
    }
 
    CoUninitialize();
    return status;
}
네트워크(NIC) 사용/사용해제 하기 네트워크(NIC) 사용/사용해제 하기 Reviewed by Tae-seob Shin on 9월 30, 2018 Rating: 5

댓글 없음:

Powered by Blogger.