일단 BHO에 접근하여 IHTMLDocument2를 얻었다는 가정하에 시작.

IHTMLDocument2  *pHTMLDoc2


BSTR ValueChange;

BSTR TagID;

ValueChange = CStringToBstr(g_BhoTagValueChange);

TagID = CStringToBstr(g_BhoTagID);


CComQIPtr <IHTMLDocument3> pDocu3_ValueChange(pHTMLDoc2);

CComPtr <IHTMLElement> pElement_ValueChange;


pDocu3_ValueChange->getElementById(TagID, &pElement_ValueChange);


CComQIPtr <IHTMLInputElement> pInput_ValueChange(pElement_ValueChange);


if( pInput_ValueChange )

{

pInput_ValueChange->put_value(ValueChange);

}

CStringToBstr()은 Edit Control 에서 입력받은 CString을 BSTR로 변환해주기 위해 사용함.

주요 내용은 

CComQIPtr <IHTMLDocument3> pDocu3_ValueChange(pHTMLDoc2);

로 IHTMLDocument2를 3으로 바꿔주고

pDocu3_ValueChange->getElementById(TagID, &pElement_ValueChange);

입력받은 테그 ID로 해당 엘리먼트를 검색 후

CComQIPtr <IHTMLInputElement> pInput_ValueChange(pElement_ValueChange);

(INPUT테그일경우) IHTMLInputElement로 변환함

정상적으로 변환되었다면 put_value함수를 이용해 값을 변경할 수 있음.

반대로 get_value를 사용하면 해당값을 얻어올 수 있다.

Posted by Nvdark
,

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가 있는 것을 발견할 수 있다!


그럼...이상...

 





Posted by Nvdark
,

필요한 파일을 불러와 로드하거나 읽거나 할 때가 종종 있다.

뭐 MEMGET에선 BHO파일이나 드라이버 파일 찾을때 사용했다. 

사용방법은 간단함 ㅎㅎ


CHAR szFilter[] = "All Files(*.*)|*.*||";

CString csFilter;

CString BhoFilePath;

csFilter=NvBhoMain_CtoWC(szFilter); //프로젝트를 유니코드기반으로 하는바람에 항상 자료형 변환에 귀찮음을 느끼고잇음...

CFileDialog MP_NVBho_FILELOAD_Dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, csFilter);


if(MP_NVBho_FILELOAD_Dlg.DoModal() == IDOK)   //모달로 파일 검색창 활성화

{

SetDlgItemText(IDC_EDIT_FileName, MP_NVBho_FILELOAD_Dlg.GetPathName()); 

BhoFilePath = MP_NVBho_FILELOAD_Dlg.GetPathName(); //선택한 파일 경로 얻기

mControlBHODllPath.ReplaceSel(BhoFilePath);  //에디트컨트롤에 스트링 넣기

}


Posted by Nvdark
,

C++ (MFC)에서 IP address control 사용시 값 얻어오기!

=================================================================
헤더파일

CIPAddressCtrl E_IPv;

==================================================================

void CMetGetDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);

 //IDC_LIST와 리스트 선언한 변수를 연결
 DDX_Control(pDX, IDC_IPADDRESS, E_IPv);
}

============================================================

//IP Address control 에서 값 얻어오기!!
 BYTE IP_a,IP_b,IP_c,IP_d;

 E_IPv.GetAddress(IP_a,IP_b,IP_c,IP_d);
 Temp.Format(_T("%d.%d.%d.%d"),IP_a,IP_b,IP_c,IP_d);

 if(IP_a==NULL || IP_b==NULL || IP_c==NULL || IP_d==NULL)
 {
  MessageBox(_T("Wrong IP Address! Plz Check your Input."),MB_OK);
 }

Posted by Nvdark
,