[MFC] 자신의 IP정보 가져오기(Local, gateway 등) – GetAdaptersInfo

ARP 모듈에서 스푸핑 기능사용 시 Local IP와 gateway IP를 수동으로 적자니 귀찮아서 자동 입력으로 수정함.

이에 따라 추가 코드가 발생했는데….

 

자신의 IP 주소를 가져오는 법은 다음과 같다.

Memget 내에 이리저리 왔다갔다 하는 불필요한 소스코드가 좀 많아서 핵심만 적겠음.

 

일단 컴퓨터에서 디바이스 정보를 가져와야 한다. 이유는 각 디바이스마다 가지고 있는 IP정보들이 다르기때문이다.

자신이 사용중인 네트워크 디바이스를 선택하여 해당 장비의 IP주소 정보를 가져와야 한다.

GetAdaptersInfo() 함수로 현재 네트워크 디바이스의 정보를 가져올 수 있다.

사용법은  dwStatus = GetAdaptersInfo(pAdapterInfo,&ulBuffer); 로 사용하면 된다.

첫 번째 인자는

PIP_ADAPTER_INFO pAdapterInfo = NULL;

로 선언하였으며, 구조체(리스트로 되어있음)에 대한 자세한 내용은 MSDN을 참조 바람.

PIP_ADAPTER_INFO 요녀석은 어뎁터가 가지고 있는 각종 정보를 저장하는 구조체라고 보면 될듯하다.

 

다시 작성하면

 

 

 

 DWORD dwStatus;PIP_ADAPTER_INFO pAdapterInfo = NULL;

ULONG ulBuffer = 0;

dwStatus = GetAdaptersInfo(pAdapterInfo,&ulBuffer);

 

 

가 되겠다.  하지만 종종 오버플로우가 발생하면서 정상적인 동작을 안하는 경우가 있다.

그럴경우에는

 

pAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulBuffer);

요렇게 메모리 할당을 한 후 다시 시도하면 정상적으로 잘 동작하는 것을 볼 수 있다.

 

그리고 해야할 것은 원하는 디바이스 정보를 찾는 일이다. 일단 컨트롤 리스트건 리스트 박스건 출력된 디바이스를 선택한 후 해당 번호를 a_devnum 에 저장했다 가정하면,

 

 

 

for(FindDeviceCount = 0 ; FindDeviceCount<a_devnum ; FindDeviceCount++)

{

pAdapterInfoP = pAdapterInfoP->Next;

}

 

이런식으로 간단하게 루프 돌면서 해당 디바이스를 찾으면 된다.

혹은 PIP_ADAPTER_INFO구조체를 보면 디바이스 이름과 기타 정보를 담고 있기 때문에 이름, 아이피 등으로도 디바이스를 찾을 수 있다.

리스트에서 해당 디바이스를 찾았으면 다음은 간단하다.

pAdapterInfoP->IpAddressList.IpAddress.String

pAdapterInfoP->GatewayList.IpAddress.String

에 Local IP, Gateway IP가 있는 것을 발견할 수 있다!

 

그럼…이상…