WireShark网络抓包实验.docx
《WireShark网络抓包实验.docx》由会员分享,可在线阅读,更多相关《WireShark网络抓包实验.docx(14页珍藏版)》请在冰豆网上搜索。
WireShark网络抓包实验
计算机网络管理
姓名:
姚建国
班级:
网络工程
学号:
080510101
一.实验目的
學會使用snmpb分析mibtree,使用wireshark抓包以及分析該包。
根據snmp協定,分析抓包軟體抓出的結果。
二.实验内容
1.使用Snmp
1)安装snmpb
2)实验步骤
3)点击mibtree分析各结点
2.使用wireshark抓包
1)安装WireShark,中间会提示安装WinPcap,一切都是默认。
2)实验前先关掉联网的软件,防止产生一些不必要的流量,以利于实验分析。
3)打开WireShark,选择"Capture>>Interfaces",选择自己的网卡。
选择"Start"开始监控流量。
UDP协议分析,选择一个包单击,结果如下
抓包过程中发现TCP组播、HTTP组播等。
A.组播分析.
EthernetII帧,
Src:
RealtekS_46:
f2:
4f(00:
e0:
4c:
46:
f2:
4f),Dst:
IPv4mcast_66:
74:
6e(01:
00:
5e:
66:
74:
6e)。
源地址RealtekS,目的地址IPv4mcast_66:
74:
6e。
InternetProtocol(IP数据包),
UserDatagramProtocol(UDP数据包),SrcPort:
irisa(11000),DstPort:
irisa(11000)。
B.ARP广播。
EthernetII帧,
Src:
FujianSt_f8:
ec:
eb(00:
d0:
f8:
f8:
ec:
eb)[锐捷网络的交换机,这里显示"福建实达网络"],Dst:
Broadcast(ff:
ff:
ff:
ff:
ff:
ff)
AddressResolutionProtocol(request)(ARP数据包)
SenderMACaddress:
FujianSt_f8:
ec:
eb(00:
d0:
f8:
f8:
ec:
eb)
SenderIPaddress:
10.1.10.254(10.1.10.254)
TargetMACaddress:
00:
00:
00_00:
00:
00(00:
00:
00:
00:
00:
00)
TargetIPaddress:
10.1.10.135(10.1.10.135)
ARP是一个三层的协议,直接跑在Frame之上
4)再次启动WireShark,打开网页[url][/url],抓包。
C.HTTP数据包分析。
EthernetIIFrame,
Src:
Elitegro_59:
a7:
88(00:
16:
ec:
59:
a7:
88)【VIA的网卡,这里显示Elitegro】,
Dst:
FujianSt_f8:
ec:
eb(00:
d0:
f8:
f8:
ec:
eb)
InternetProtocol,
Src:
10.1.10.157(10.1.10.157),Dst:
203.208.33.100(203.208.33.100)
【G的IP地址】
TransmissionControlProtocol,
SrcPort:
hppronetman(3908),DstPort:
http(80),Seq:
0,Len:
0
从抓的包中可以看到TCP的连接建立过程(Three-wayHandshake).[syn][syn,ack][ack]
3.报文构造代码
voidBindSequenceOf_TLV(unsignedchar*return_tlv_bind,int&return_tlv_bind_len,messageMSG)//namevaluenamevalue
{for(inti=0;i<6;i++)//
{//getreturn_tlv_bind
unsignedcharreturn_tlv[50];intreturn_tlv_len=0;
unsignedchartlv_name[10];inttlv_name_len=0;
unsignedchartlv_value[10];inttlv_value_len=0;//for
if(MSG.pdu.variable_bindings[i].name.length()==0)continue;
else
{Objectidentifier_TLV(tlv_name,tlv_name_len,MSG.pdu.variable_bindings[i].name);
Sequence_TLV(return_tlv,return_tlv_len,tlv_name,tlv_name_len);
if(MSG.pdu.pdutype==2)//SET_REQUEST
{Null_TLV(tlv_value,tlv_value_len,25);
}else
{Null_TLV(tlv_value,tlv_value_len,-1);
}//((*(MSG.pdu.variable_bindings+i)).name);
Sequence_TLV(return_tlv,return_tlv_len,tlv_value,tlv_value_len);
SequenceOf_TLV(return_tlv_bind,return_tlv_bind_len,return_tlv,return_tlv_len);
}}}
voidPduSequence_TLV(unsignedchar*return_tlv_Pdu,int&return_tlv_Pdu_len,messageMSG)//pdutypeid00bind//,TLV&return_tlv_bind
{switch(MSG.pdu.pdutype)
{case0:
return_tlv_Pdu[0]=160;break;//A0H"10100000"request
case1:
return_tlv_Pdu[0]=161;break;//A1H"10100001"next_request
case2:
return_tlv_Pdu[0]=163;break;//A3H"10100011"set_request
case3:
return_tlv_Pdu[0]=162;break;//A2H"10100010"response
case4:
return_tlv_Pdu[0]=164;break;//A4H"10100100"
default:
break;
}
unsignedcharTLV_request_id[5];intTLV_request_id_len=0;
unsignedcharTLV_error_status[5];intTLV_error_status_len=0;
unsignedcharTLV_error_index[5];intTLV_error_index_len=0;
Integer_TLV(TLV_request_id,TLV_request_id_len,MSG.pdu.request_id);Pdu_Sequence_TLV(return_tlv_Pdu,return_tlv_Pdu_len,TLV_request_id,TLV_request_id_len);Integer_TLV(TLV_error_status,TLV_error_status_len,MSG.pdu.error_status);//error_status;Pdu_Sequence_TLV(return_tlv_Pdu,return_tlv_Pdu_len,TLV_error_status,TLV_error_status_len);Integer_TLV(TLV_error_index,TLV_error_index_len,MSG.pdu.error_index);//error_index;Pdu_Sequence_TLV(return_tlv_Pdu,return_tlv_Pdu_len,TLV_error_index,TLV_error_index_len);
unsignedcharreturn_tlv_bind[50];intreturn_tlv_bind_len=0;//
BindSequenceOf_TLV(return_tlv_bind,return_tlv_bind_len,MSG);//varBind*variable_bindings;
Pdu_Sequence_TLV(return_tlv_Pdu,return_tlv_Pdu_len,return_tlv_bind,return_tlv_bind_len);
}voidMessSequence_TLV(unsignedchar*return_tlv_message,int&return_tlv_message_len,messageMSG)//versioncommunitysnmppdu,TLV&return_tlv_Pdu
{unsignedcharTLV_version[10];intTLV_version_len=0;
unsignedcharTLV_community[10];intTLV_community_len=0;
Integer_TLV(TLV_version,TLV_version_len,MSG.version);//versionSequence_TLV(return_tlv_message,return_tlv_message_len,TLV_version,TLV_version_len);OctetString_TLV(TLV_community,TLV_community_len,MSG.community);//communitySequence_TLV(return_tlv_message,return_tlv_message_len,TLV_community,TLV_community_len);unsignedcharreturn_tlv_Pdu[150];intreturn_tlv_Pdu_len=0;
PduSequence_TLV(return_tlv_Pdu,return_tlv_Pdu_len,MSG);//PDUspdu;Sequence_TLV(return_tlv_message,return_tlv_message_len,return_tlv_Pdu,return_tlv_Pdu_len);
}voidcreatemessage(char*Buffer,char*pdutype,int&leng_buffer)
{usingstd:
:
cout;
usingstd:
:
cin;
usingstd:
:
endl;
unsignedcharreturn_tlv_message[300];
intreturn_tlv_message_len=0;
messageMSG;
inti=0;
MSG.pdu.pdutype=atoi(pdutype);
cout<<"chooseinputthecommunity"<cin>>MSG.community;
cout<<"chooseinputthename,maxsize:
6"<MSG.pdu.variable_bindings=newstructvarBind[6];
stringinput;//forinput
cin>>input;
while(input!
="send")
{MSG.pdu.variable_bindings[i++].name=input;
cin>>input;
}MSG.version=0;
//MSG.community="public";
MSG.pdu.error_index=0;
MSG.pdu.error_status=0;
MSG.pdu.request_id=abs(rand());//90...32767
MessSequence_TLV(return_tlv_message,return_tlv_message_len,MSG);
leng_buffer=return_tlv_message_len;
for(intl=0;l{cout<<(int)return_tlv_message[l]<<"";
Buffer[l]=return_tlv_message[l];//(int)
//cout<<(int)Buffer[l]<<"";
}cout<解析和解码代码如下:
voidstrcpyTLV(chartemp_INTEGER[],charget_pdu[],intk,intlen)//字符串拷贝,拷贝value部分
{intbegin=k;
for(intp=0;p{temp_INTEGER[p]=get_pdu[begin++];
}temp_INTEGER[len]=0;
}voidprinout(chartemp_INTEGER[],boolchange_line)//输出整数value部分
{if(change_line)
{std:
:
cout<<(int)temp_INTEGER[0]<}elsestd:
:
cout<<(int)temp_INTEGER[0];}
voidprintout_OBJE(chartemp_name[],intlen)//输出标识符
{std:
:
cout<<"1.3.";inti=1;while(i{std:
:
cout<<(int)temp_name[i++]<<".";
}std:
:
cout<voidDcode_version(chartemp_INTEGER[],intlen)//version解析
{std:
:
cout<<"version:
"<prinout(temp_INTEGER,true);}
voidDcode_OCTETSTRING(chartemp_OCTETSTRING[],intlen)//community解析
{std:
:
cout<<"community:
"<voidDcode_PDUTYPE(intTlv_T)//pdutype解析
{std:
:
cout<<"pdutype:
"<voidDcode_resid(chartemp_INTEGER[],intlen)//requestid解析
{for(intg=0;g{temp_INTEGER[g]<<=(len-1-g)*8;}intsum=temp_INTEGER[0];
for(inth=1;h{sum|=temp_INTEGER[h];
}std:
:
cout<<"requestid:
"<voidDcode_errorstatus(chartemp_INTEGER[],intlen)//errorstatus解析
{std:
:
cout<<"errorstatus:
"<prinout(temp_INTEGER,false);
switch(temp_INTEGER[0])
{case0:
std:
:
cout<<"NoError"<std:
:
cout<<"TooBig"<std:
:
cout<<"NoSuchname"<case3:
std:
:
cout<<"BadValue"<case4:
std:
:
cout<<"ReadOnly"<std:
:
cout<<"genErr"<break;}}
voidDcode_errorindex(chartemp_INTEGER[],intlen)//errorindex解析
{std:
:
cout<<"errorindex:
"<prinout(temp_INTEGER,false);
if(temp_INTEGER[0]!
=0)
{std:
:
cout<<"The"<<(int)temp_INTEGER[0]<<"nameiswrong"<}elsestd:
:
cout<}voidDcode_name(chartemp_name[],inttotal_name,intlen)//标识符解析
{std:
:
cout<<"name:
"<printout_OBJE(temp_name,len);}
voidDcode_value_INTEGER(chartemp_INTEGER[],inttotal_name,intlen)//value解析
{std:
:
cout<<"value:
"<prinout(temp_INTEGER,true);}
voidDcode_Null(intlen)//Null类型解析
{std:
:
cout<<"value:
"<voidDcode_IpAddress(chartemp_ipaddress[],intlen)//ipaddress解析
{std:
:
cout<<"Ipaddress:
"<for(intmm=0;mm{std:
:
cout<voidDecode_pdu(charget_pdu[])//主函数
{std:
:
cout<<"parasing"<<"type"<<""<<"len"<<""<<"value"<<""<inttotal_INTEGER=0;inttotal_name=0;
intlen=0;intlen1=0;intlen2=0;intlen3=0;intlen4=0;//定义各length值
intlen7=0;intlen6=0;intlen5=0;intlen8=0;
inti=2;while(i{intTlv_T=0;Tlv_T=(int)get_pdu[i];
switch(Tlv_T)
{caseINTEGER:
//2
++total_INTEGER;
if(total_INTEGER==1)//vertion
{len=(int)get_pdu[i+1];
chartemp_INTEGER[10];//
strcpyTLV(temp_INTEGER,get_pdu,i+2,len);
Dcode_version(temp_INTEGER,len);
i=i+len+1;//i=i+len+1+1;
}elseif(total_INTEGER==2)//requestId
{len1=(int)get_pdu[i+1];
chartemp_INTEGER[100];//
strcpyTLV(temp_INTEGER,get_pdu,i+2,len1);
Dcode_resid(temp_INTEGER,len1);i=i+len1+1;}elseif(total_INTEGER==3)//errorstatus
{len2=(int)get_pdu[i+1];
chartemp_INTEGER[5];//
strcpyTLV(temp_INTEGER,get_pdu,i+2,len2);
Dcode_errorstatus(temp_INTEGER,len2);
i=i+len2+1;}elseif(total_INTEGER==4)//errorIndex
{len3=(int)get_pdu[i+1];
chartemp_INTEGER[5];//
strcpyTLV(temp_INTEGER,get_pdu,i+2,len3);
Dcode_errorindex(temp_INTEGER,len3);
i=i+len3+1;}else//其他
{len4=(int)get_pdu[i+1];
chartemp_INTEGER[100];//
strcpyTLV(temp_INTEGER,get_pdu,i+2,len4);
Dcode_value_INTEGER(temp_INTEGER,total_name,len4);
i=i+len4+1;//}
break;
caseOCTETSTRING:
//4字符
len5=(int)get_pdu[i+1];
chartemp_OCTETSTRING[50];//
strcpyTLV(temp_OCTETSTRING,get_pdu,i+2,len5);
Dcode_OCTETSTRING(temp_OCTETSTRING,len5);
i=i+len5+1;break;
caseGetResponse:
//pdutype
//intlen=get_pdu[i+1];
Dcode_PDUTYPE(Tlv_T);i=i+2-1;break;caseTrap:
//intl