| 手把手教你玩转ARP包 |
|
| 作者:佚名 来源:安全在线
更新时间:2005-12-26 【字体:小
大】 |
|
<%=(int(rnd()*1)+1)%>您当前的位置:中国安全在线cnsafer.com 请进入[技术论坛]发表评论 ; // 名字
char szIPAddrStr[16]; // IP
char szHWAddrStr[18]; // MAC
DWORD dwIndex; // 编号
}INFO_ADAPTER, *PINFO_ADAPTER;
/*********************************************************************
* Name & Params::
* AddAdapInfoToList
* (
* CListCtrl& list : CARPPlayerDlg传入的list句柄
* )
* Purpose:
* 获得系统的网卡信息,并将其添加到list控件中
* Remarks:
* 获得网卡IP及MAC用到了IpHelper api GetAdaptersInfo
******************************************************************/
void AddAdapInfoToList(CListCtrl& list)
{
char tempChar;
ULONG uListSize=1;
PIP_ADAPTER_INFO pAdapter; // 定义PIP_ADAPTER_INFO结构存储网卡信息
int nAdapterIndex = 0;
DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize);//关键函数
if (dwRet == ERROR_BUFFER_OVERFLOW)
{
PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);
dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);
if (dwRet == ERROR_SUCCESS)
{
pAdapter = pAdapterListBuffer;
while (pAdapter) // 枚举网卡然后将相关条目添加到List中
{
// 网卡名字
CString strTemp = pAdapter->AdapterName;
strTemp = "\\Device\\NPF_" + strTemp; // 加上前缀
list.InsertItem(nAdapterIndex,strTemp);
strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);
// IP
strcpy(AdapterList[nAdapterIndex].szIPAddrStr,
pAdapter->IpAddressList.IpAddress.String );
list.SetItemText(nAdapterIndex,1,AdapterList[nAdapterIndex].szIPAddrStr);
// MAC
formatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr, pAdapter->Address );
list.SetItemText(nAdapterIndex,2,AdapterLis[nAdapterIndex].szHWAddrStr);
// 网卡编号
AdapterList[nAdapterIndex].dwIndex = pAdapter->Index;
pAdapter = pAdapter->Next;
nAdapterIndex ++;
}
delete pAdapterListBuffer;
}
}
}
2)获取ARP条目列表
// ARP条目信息
typedef struct tagARPInfo
{
char szIPAddrStr[16]; // IP
char szHWAddrStr[18]; // MAC
DWORD dwType; // 类型
}INFO_ARP, *PINFO_ARP;
/**********************************************************************
* Name & Params::
* AddARPInfoToList
* (
* CListCtrl& list : CARPPlayerDlg传入的list句柄
* const short nAdapterIndex : 用户选中的网卡编号
* )
* Purpose:
* 读入系统的ARP缓存列表,.并添加到对话框中
* Remarks:
* 用到了IpHelper api GetIpNetTable
* 而且用到了WinSock的api,所以要包含
*****************************************************************/
void AddARPInfoToList(CListCtrl& list,const short nAdapterIndex)
{
char tempChar;
DWORD dwListSize = 1;
DWORD dwRet;
in_addr inaddr;
list.DeleteAllItems();
dwRet = GetIpNetTable((PMIB_IPNETTABLE)&tempChar, &dwListSize, TRUE); // 关键函数
if (dwRet == ERROR_INSUFFICIENT_BUFFER)
{
PMIB_IPNETTABLE pIpNetTable = (PMIB_IPNETTABLE)new(char[dwListSize]);
dwRet = GetIpNetTable(pIpNetTable, &dwListSize, TRUE);
if (dwRet == ERROR_SUCCESS)
{
for (int i=0; i<(int)pIpNetTable->dwNumEntries; i++)
{
// IP
inaddr.S_un.S_addr = pIpNetTable->table[i].dwAddr;
strcpy( ARPList[i].szIPAddrStr, inet_ntoa(inaddr) );
// MAC
formatMACToStr( ARPList[i].szHWAddrStr, pIpNetTable->table[i].bPhysAddr );
// Type
ARPList[i].dwType = pIpNetTable->table[i].dwType;
if (AdapterList[nAdapterIndex].dwIndex != pIpNetTable->table[i].dwIndex) continue;
list.InsertItem(i,ARPList[i].szIPAddrStr);
  上一页 [1] [2] [3] [4] 下一页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力 |
| 文章录入:ls1238 责任编辑:ls1238
|
|
上一篇文章: 利用ARP探测以太网中的活动主机
下一篇文章: 网络协议分析工具-tcpdump 快速入门手册 |
| 【字体:小
大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】
|