《网络编程与协议分析》课程设计报告 联系客服

发布时间 : 星期日 文章《网络编程与协议分析》课程设计报告更新完毕开始阅读

unsigned short int ip_Sum; //首部校验和 unsigned int ip_SoIp; //源ip unsigned int ip_DeIp; //目的ip };

struct tcphead { unsigned short tcp_SoPort; //16位的源端口 unsigned short tcp_DePort; //16位的目的端口 unsigned int tcp_Seq; //32位的序列号 unsigned int tcp_Ack; //32位的确认号 unsigned char tcp_LenAndRes; //4位的首部长度和4位的保留字 unsigned char tcp_Flag; //2位的保留字和6位的标志位 unsigned short tcp_Win; //16位的窗口大小 unsigned short tcp_Wum; //16位校验和 unsigned short tcp_Mov; //16位的紧急数据偏移量 };

struct udphead { unsigned short udp_SoPort; //源端口 unsigned short udp_DePort; //目的端口 unsigned short udp_Len; //总长度 unsigned short udp_Sum; //校验和 };

struct icmphead {

unsigned char icmp_Type; //类型 unsigned char icmp_Code; //代码 unsigned short icmp_Sum; //16位检验和 };

4)“开始”按钮事件

void CTestDlg::OnStart() { // TODO: Add your control notification handler code here DWORD code;

}

if (!GetExitCodeThread(m_thr,&code) || (code != STILL_ACTIVE)) { alldata * recvdata=new alldata; recvdata->lis=&m_List; recvdata->sock=m_sock; m_thr=CreateThread(NULL,0,RecvProc,(LPVOID)recvdata,0,NULL); CloseHandle(m_thr); } else { m_List.DeleteAllItems(); ResumeThread(m_thr); }

GetDlgItem(IDC_STOP)->EnableWindow(TRUE); GetDlgItem(IDC_START)->EnableWindow(FALSE); GetDlgItem(IDC_STOP)->SetFocus();

5)数据包抓取与初步处理

DWORD WINAPI CTestDlg::RecvProc(LPVOID lpParameter) { SOCKET sock=((alldata*)lpParameter)->sock; CListCtrl * lis=(CListCtrl *)(((alldata*)lpParameter)->lis); struct iphead *ih; SOCKADDR_IN tem; char RecvBuf[65535] = {0}; char soip[16]; char deip[16]; char buf[100];

int i=0;

while(1) { if(int a=recv(sock,ddat[++count].buff,sizeof(ddat[count].buff),0)<=0) continue; ih=(struct iphead *)(ddat[count].buff); tem.sin_addr.s_addr=ih->ip_SoIp; strncpy(soip,inet_ntoa(tem.sin_addr),16); tem.sin_addr.s_addr=ih->ip_DeIp; strncpy(deip,inet_ntoa(tem.sin_addr),16);

lis->InsertItem(i, \

sprintf(buf,\lis->SetItemText(i,0,buf);

sprintf(buf,\lis->SetItemText(i,1,buf); sprintf(buf,\lis->SetItemText(i,2,buf); sprintf(buf,\lis->SetItemText(i,3,buf); sprintf(buf,\lis->SetItemText(i,4,buf);

sprintf(buf,\lis->SetItemText(i,5,buf);

sprintf(buf,\lis->SetItemText(i,6,buf); sprintf(buf,\lis->SetItemText(i,7,buf);

switch((int)ih->ip_Protocol) { case 1:sprintf(buf,\ case 2:sprintf(buf,\

}

case 6:sprintf(buf,\ case 8:sprintf(buf,\ case 9:sprintf(buf,\ case 17:sprintf(buf,\ case 41:sprintf(buf,\ case 89:sprintf(buf,\ default:sprintf(buf,\}

lis->SetItemText(i,8,buf); sprintf(buf,\lis->SetItemText(i,9,buf); sprintf(buf,\lis->SetItemText(i,10,buf); sprintf(buf,\lis->SetItemText(i,11,buf); i++;

Sleep(100); }

return true;

6)表格单击事件

void CTestDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; CString buf; char tem[100]; int i; if(pNMListView->iItem != -1) { i=pNMListView->iItem; CString strtemp; CNewDlg newdlg;