[winpcap]抓来了IP包,然后分析得到的地址,如何是随机值啊帮小弟我看看
[winpcap]抓来了IP包,然后分析得到的地址,怎么是随机值啊。帮我看看
我设置的过滤字符串是:ip and udp
我把包数据的指针,保存在数组里。
CArray <CPacket,CPacket> arPacket;
数组里的条目对应于 一个 listctrl.
当我单击listctrl一行时,想显示出IP目的地址和源地址。
但我程序显示出来的,好像都是随机值啊,根本不是我们网内常见的IP
代码:
我的抓包线程:
UINT pcap_thread(LPVOID Param)
{
int rst;
struct pcap_pkthdr *header;
const u_char *pkt_data;
time_t localetime;
int y = 0;
CString timestr;
CAimsnifApp * papp = (CAimsnifApp * ) AfxGetApp();
CAimsnifDlg * pmaindlg = ( CAimsnifDlg *) papp-> m_pMainWnd;
while ( bcaprunning && ( rst = pcap_next_ex( papp-> adhandle, &header, &pkt_data ) ) > = 0 )
{
if ( rst = 0)
continue ;
localetime = header-> ts.tv_sec ;
CTime tim (localetime);
timestr = tim.Format( "%Y %B %d %H:%M:%S ");
pmaindlg-> InsertItem( timestr ,pkt_data );
}
把包保存到数组中
// Insert item into the list.
bool CAimsnifDlg::InsertItem( CString str, const u_char * pkt_data )
{
CPacket apkt;
apkt.SetPacket( pkt_data );
apkt.SetTimestr( str );
arPacket.SetAtGrow( packet_count,apkt);
m_list.SetItemCountEx( packet_count );
//m_list.Invalidate();
packet_count++;
return true;
}
//响应双击列表的时候,显示IP地址
void CAimsnifDlg::OnNMDblclkListPacket(NMHDR *pNMHDR, LRESULT *pResult)
{
POSITION pos = m_list.GetFirstSelectedItemPosition();
int item =0;
if (pos == NULL)
{
TRACE( "My god ,no item was selected!\n ");
}
else
{
item =m_list.GetNextSelectedItem( pos );
}
CString strmsg;
const u_char * packet = arPacket.ElementAt(item).GetPacket();//从数组获取保存的包数据指针,这样可以么???
struct ip_header * ih =(ip_header *) packet+ 14;//ethernet
strmsg.Format(_T ( "source_ip:%d.%d.%d.%d,destination_ip:%d.%d.%d.%d "),
ih-> saddr.byte1,
ih-> saddr.byte2,
ih-> saddr.byte3,
ih-> saddr.byte4,
ih-> daddr.byte1,
ih-> daddr.byte2,
ih-> daddr.byte3,
ih-> daddr.byte4);
AfxMessageBox( strmsg );
*pResult = 0;
}
------解决方案--------------------
分不少!给我三分之一就够了!
哈哈,LZ,我也正想学习学习这块呢?俺不会,不好意思呀!
------解决方案--------------------
笑~
又是winpcap唉
建议去看看SnifferFox的开源代码
很有帮助的~
作者的主页上有得下:
http://www.shaohui.org/snifferfox.html
------解决方案--------------------
ding
------解决方案--------------------
我设置的过滤字符串是:ip and udp
我把包数据的指针,保存在数组里。
CArray <CPacket,CPacket> arPacket;
数组里的条目对应于 一个 listctrl.
当我单击listctrl一行时,想显示出IP目的地址和源地址。
但我程序显示出来的,好像都是随机值啊,根本不是我们网内常见的IP
代码:
我的抓包线程:
UINT pcap_thread(LPVOID Param)
{
int rst;
struct pcap_pkthdr *header;
const u_char *pkt_data;
time_t localetime;
int y = 0;
CString timestr;
CAimsnifApp * papp = (CAimsnifApp * ) AfxGetApp();
CAimsnifDlg * pmaindlg = ( CAimsnifDlg *) papp-> m_pMainWnd;
while ( bcaprunning && ( rst = pcap_next_ex( papp-> adhandle, &header, &pkt_data ) ) > = 0 )
{
if ( rst = 0)
continue ;
localetime = header-> ts.tv_sec ;
CTime tim (localetime);
timestr = tim.Format( "%Y %B %d %H:%M:%S ");
pmaindlg-> InsertItem( timestr ,pkt_data );
}
把包保存到数组中
// Insert item into the list.
bool CAimsnifDlg::InsertItem( CString str, const u_char * pkt_data )
{
CPacket apkt;
apkt.SetPacket( pkt_data );
apkt.SetTimestr( str );
arPacket.SetAtGrow( packet_count,apkt);
m_list.SetItemCountEx( packet_count );
//m_list.Invalidate();
packet_count++;
return true;
}
//响应双击列表的时候,显示IP地址
void CAimsnifDlg::OnNMDblclkListPacket(NMHDR *pNMHDR, LRESULT *pResult)
{
POSITION pos = m_list.GetFirstSelectedItemPosition();
int item =0;
if (pos == NULL)
{
TRACE( "My god ,no item was selected!\n ");
}
else
{
item =m_list.GetNextSelectedItem( pos );
}
CString strmsg;
const u_char * packet = arPacket.ElementAt(item).GetPacket();//从数组获取保存的包数据指针,这样可以么???
struct ip_header * ih =(ip_header *) packet+ 14;//ethernet
strmsg.Format(_T ( "source_ip:%d.%d.%d.%d,destination_ip:%d.%d.%d.%d "),
ih-> saddr.byte1,
ih-> saddr.byte2,
ih-> saddr.byte3,
ih-> saddr.byte4,
ih-> daddr.byte1,
ih-> daddr.byte2,
ih-> daddr.byte3,
ih-> daddr.byte4);
AfxMessageBox( strmsg );
*pResult = 0;
}
------解决方案--------------------
分不少!给我三分之一就够了!
哈哈,LZ,我也正想学习学习这块呢?俺不会,不好意思呀!
------解决方案--------------------
笑~
又是winpcap唉
建议去看看SnifferFox的开源代码
很有帮助的~
作者的主页上有得下:
http://www.shaohui.org/snifferfox.html
------解决方案--------------------
ding
------解决方案--------------------