精华内容
下载资源
问答
  • ARP协议解析-wireshark抓包分析

    千次阅读 2021-01-05 22:55:06
    ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的...

    最近很多人发现了,我写了好几篇协议解析文章,但是大部分人都不怎么熟悉以太网点对点协议之pppoe协议讲解PPTP协议详解及报文解析的协议,从事网络安全开发的,可能常见!今天主要研究ARP协议。

    什么是ARP协议

    ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。

    ARP协议在网络层下面作为OSI网络和OSI链路层之间接口的一部分运行。在通过以太网使用IPv4时使用。

    ARP有哪些类型

    ARP协议延伸出来的"代理ARP"、“免费ARP”、“RARP”、“IARP”,类型,而这些不同种类的ARP,主要应用在:

    代理ARP

    代理ARP是一种技术,通过该技术,给定网络上的代理设备可以响应ARP请求以获取不在该网络上的IP地址。代理知道流量目的地的位置,并提供自己的MAC地址作为目的地。

    免费ARP

    免费ARP几乎就像一个管理程序,是网络上的主机简单地宣布或更新其IP到MAC地址的一种方式。ARP请求不会提示免费ARP将IP地址转换为MAC地址。

    RARP

    不知道自己IP地址的主机可以使用反向地址解析协议(RARP)进行发现。

    IARP

    ARP使用IP地址查找MAC地址,而IARP使用MAC地址查找IP地址。

    为什么需要ARP

    ARP是必需的,因为连接到网络的主机或计算机的软件地址(IP地址)需要转换为硬件地址(MAC地址)。

    如果没有ARP协议,则主机将无法找出另一台主机的硬件地址。

    ARP工作流程

    ARP整个完整交互过程仅需要两个包,一问一答即可搞定! 一个是 ARP 请求过程,一个是 ARP 应答过程。

    为了让大家更好的理解ARP协议以及广播和单播的概念,我们来看一下用Wireshark抓取到的真实网络中的ARP过程,通过数据包的方式来呈现。

    ARP 请求过程:
    在这里插入图片描述

    当主机PC1想要给主机PC2发送数据时,主机PC1会首先在自己的本地ARP缓存表中检查与主机PC2相匹配的MAC地址。如果主机PC1在自己的缓存表中没找到主机PC2的相关条目,那么它就要想办法获取主机PC2的MAC地址。这就需要将ARP的请求帧广播到本地网络上的所有主机中。

    ARP请求包:

    在分析 ARP 协议包之前,先介绍一下它的报文格式,以帮助用户更清楚的理解每个包。
    在这里插入图片描述
    以太网头部信息来确定这个数据包是不是一个真的广播数据包。发现这个数据包目的地址是ff:ff:ff:ff:ff:ff,这是一个广播地址,是因为主机 PC2 不知道 PC1 主机的 MAC 地址,说明当前数据包会被广播到当前网段中的所有设备上。而这个数据包中以太网的源地址就是本机的MAC地址。

    Hardware type :占2字节,硬件类型,标识链路层协议。
    Protocol type: 占2字节,协议类型,标识网络层协。
    Hardware size :占1字节,硬件地址大小,标识MAC地址长度,这里是6个字节(48bit)。
    Protocol size: 占1字节,协议地址大小,标识IP地址长度,这里是4个字节(32bit)。
    Opcode: 占2字节,操作代码,标识ARP数据包类型,1表示请求,2表示回应。
    Sender MAC address :占6字节,发送者MAC。
    Sender IP address :占4字节,发送者IP。
    Target MAC address :占6字节,目标MAC,此处全0表示在请求。
    Target IP address: 占4字节,目标IP。

    ARP 应答过程:

    在这里插入图片描述
    主机PC2将包含有自己MAC地址的ARP响应消息直接回复给主机PC1(单播)。主机PC1收到从主机PC2发来的ARP响应消息后,会将主机PC2的IP地址和MAC地址添加到自己的ARP缓存表中。接下来,主机PC1就可以向主机PC2发送消息了。

    ARP响应包:

    在这里插入图片描述
    arp应答报文和arp请求报文类似。不同的是,此时以太网头部帧头部分的目的MAC地址为发送ARP协议地址解析请求的MAC地址,而源MAC地址为被解析的主机MAC地址。同时操作类型为2表示是应答数据报文。

    Hardware type :占2字节,硬件类型,标识链路层协议。
    Protocol type: 占2字节,协议类型,标识网络层协。
    Hardware size :占1字节,硬件地址大小,标识MAC地址长度,这里是6个字节(48bit)。
    Protocol size: 占1字节,协议地址大小,标识IP地址长度,这里是4个字节(32bit)。
    Opcode: 占2字节,操作代码,标识ARP数据包类型,1表示请求,2表示回应。
    Sender MAC address :占6字节,发送者MAC。
    Sender IP address :占4字节,发送者IP。
    Target MAC address :占6字节,目标MAC,此处全0表示在请求。
    Target IP address: 占4字节,目标IP。

    按wireshark格式解析ARP协议:

    #include <sys/stat.h>
    #include <sys/types.h>
    #include <netinet/tcp.h>
    #include <netinet/udp.h>
    #include <netinet/ip.h>
    #include <netinet/ip6.h>
    #include <net/ethernet.h>
    #include <linux/if.h>
    #include <pcap.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    /* Offsets of fields within an AARP packet. */
    #define AR_HRD          0
    #define AR_PRO          2
    #define AR_HLN          4
    #define AR_PLN          5
    #define AR_OP           6
    #define MIN_ARP_HEADER_SIZE    8
    		
    		
    /* ARP / RARP structs and definitions */
    #define ARPOP_REQUEST  1       /* ARP request.  */
    #define ARPOP_REPLY    2       /* ARP reply.  */
    #define ARPOP_RREQUEST 3       /* RARP request.  */
    #define ARPOP_RREPLY   4       /* RARP reply.  */
    #define ARPOP_DRARPREQUEST 5   /* DRARP request.  */
    #define ARPOP_DRARPREPLY 6     /* DRARP reply.  */
    #define ARPOP_DRARPERROR 7     /* DRARP error.  */
    #define ARPOP_IREQUEST 8       /* Inverse ARP (RFC 1293) request.  */
    #define ARPOP_IREPLY   9       /* Inverse ARP reply.  */
    #define ATMARPOP_NAK   10      /* ATMARP NAK.  */
    #define ARPOP_MARS_REQUEST   11       /*MARS request message. */
    #define ARPOP_MARS_MULTI   12       /*MARS-Multi message. */
    #define ARPOP_MARS_MSERV   13       /*MARS-Mserv message. */
    #define ARPOP_MARS_JOIN  14       /*MARS-Join request. */
    #define ARPOP_MARS_LEAVE   15       /*MARS Leave request. */
    #define ARPOP_MARS_NAK   16       /*MARS nak message.*/
    #define ARPOP_MARS_UNSERV   17       /*MARS Unserv message. */
    #define ARPOP_MARS_SJOIN   18       /*MARS Sjoin message. */
    #define ARPOP_MARS_SLEAVE   19       /*MARS Sleave message. */
    #define ARPOP_MARS_GROUPLIST_REQUEST   20       /*MARS Grouplist request message. */
    #define ARPOP_MARS_GROUPLIST_REPLY   21       /*MARS Grouplist reply message. */
    #define ARPOP_MARS_REDIRECT_MAP   22       /*MARS Grouplist request message. */
    #define ARPOP_MAPOS_UNARP   23 /*MAPOS UNARP*/
    
    
    #define ARPHRD_ETHER			1	/* Ethernet 10Mbps		*/
    #define	ARPHRD_IEEE802			6	/* IEEE 802.2 Ethernet/TR/TB	*/
    #define ETHERTYPE_IP			0x0800
    #define AX25_P_IP	0xCC	/* ARPA Internet Protocol */
    
    /*
     * Given the hardware address type and length, check whether an address
     * is an Ethernet address - the address must be of type "Ethernet" or
     * "IEEE 802.x", and the length must be 6 bytes.
     */
    #define ARP_HW_IS_ETHER(ar_hrd, ar_hln)                         \
      (((ar_hrd) == ARPHRD_ETHER || (ar_hrd) == ARPHRD_IEEE802)     \
       && (ar_hln) == 6)
    
    
    /*
     * Given the protocol address type and length, check whether an address
     * is an IPv4 address - the address must be of type "IP", and the length
     * must be 4 bytes.
     */
    #define ARP_PRO_IS_IPv4(ar_pro, ar_pln)         \
      (((ar_pro) == ETHERTYPE_IP || (ar_pro) == AX25_P_IP) && (ar_pln) == 4)
    
    
    struct arp_header_info
    {
    	uint16_t hardware_type;
    	uint16_t protocol_type;
    	uint8_t hardware_size;
    	uint8_t protocol_szie;
    	uint16_t opcode;
    	
    };
    
    
    static bool is_arp_protocal(struct ether_header *pEther)
    {
    	
    	printf("info arp\n");
        if( ntohs(pEther->ether_type) == 0x0806 )
        {
    
    		return true;
        }
    		
        return false;
    	
    }
    static void arpop_code(uint16_t code)
    {
    	switch (code) 
    	{
    
    		case ARPOP_REQUEST:
    		case ARPOP_REPLY:
    			printf("ARP\n");
    			break;
    
    		case ARPOP_RREQUEST:
    		case ARPOP_RREPLY:
    			printf("RARP\n");
    			break;
    
    		case ARPOP_DRARPREQUEST:
    		case ARPOP_DRARPREPLY:
    		case ARPOP_DRARPERROR:
    			printf("DRARP\n");
    			break;
    
    		case ARPOP_IREQUEST:
    		case ARPOP_IREPLY:
    			printf("Inverse ARP\n");
    			break;
    
    		case ARPOP_MARS_REQUEST:
    		case ARPOP_MARS_MULTI:
    		case ARPOP_MARS_MSERV:
    		case ARPOP_MARS_JOIN:
    		case ARPOP_MARS_LEAVE:
    		case ARPOP_MARS_NAK:
    		case ARPOP_MARS_UNSERV:
    		case ARPOP_MARS_SJOIN:
    		case ARPOP_MARS_SLEAVE:
    		case ARPOP_MARS_GROUPLIST_REQUEST:
    		case ARPOP_MARS_GROUPLIST_REPLY:
    		case ARPOP_MARS_REDIRECT_MAP:
    			printf("MARS\n");
    			break;
    
    		case ARPOP_MAPOS_UNARP:
    			printf("MAPOS\n");
    			break;
    		 
    		default:
    			break;		 
    	}
    	
    }
    
    
    
    static void dissect_arp(u_char *arp_data)
    {
    	
    	int  sha_offset = 0;
    	int spa_offset = 0;
    	int tha_offset = 0;
    	int tpa_offset = 0;
    	struct arp_header_info arp_standard;
    	
    	/* Hardware Address Type */
    	
    	arp_standard.hardware_type = ntohs(*(uint16_t*)(arp_data + AR_HRD));
    	printf("Hardware type  0x%x\n",arp_standard.hardware_type);
    	
    	/* Protocol Address Type */	
    	arp_standard.protocol_type = ntohs(*(uint16_t*)(arp_data + AR_PRO));
    	printf("Protocol type  0x%x\n",arp_standard.protocol_type);
    	
    	
    	/* Hardware Address Size */	
    	arp_standard.hardware_size = arp_data[AR_HLN];
    	printf("Hardware Size  %d\n",arp_standard.hardware_size);
    	
    	/* Protocol Address Size */
    	arp_standard.protocol_szie = arp_data[AR_PLN];	
    	printf("Protocol Size  %d\n",arp_standard.protocol_szie);
    	
    	/* Operation */	
    	arp_standard.opcode  = ntohs(*(uint16_t*)(arp_data + AR_OP));
    	printf("Operation  0x%x\n",arp_standard.opcode);
    	
    	int  tot_len = MIN_ARP_HEADER_SIZE + arp_standard.hardware_size*2 + arp_standard.protocol_szie*2;
    	printf("arp total length %d\n",tot_len);
    	if (tot_len > 28)/*格式出错的数据包*/
    		return ;
    	
    	arpop_code(arp_standard.opcode);
    	
    	/* Get the offsets of the addresses. */	
    	/* Source Hardware Address */
    	sha_offset = MIN_ARP_HEADER_SIZE;
    	
    	/* Source Protocol Address */
    	spa_offset = sha_offset + arp_standard.hardware_size;
    	
    	/* Target Hardware Address */
    	tha_offset = spa_offset + arp_standard.protocol_szie;
    
    	/* Target Protocol Address */
    	tpa_offset = tha_offset + arp_standard.hardware_size;
    
    	
    	if ((arp_standard.opcode == ARPOP_REPLY || arp_standard.opcode == ARPOP_REQUEST) &&
    	ARP_HW_IS_ETHER(arp_standard.hardware_type, arp_standard.hardware_size) &&
    	ARP_PRO_IS_IPv4(arp_standard.protocol_type, arp_standard.protocol_szie))
    	{
    		printf("========1==========\n");
    		printf("Sender Mac address %02X:%02X:%02X:%02X:%02X:%02X\n",
    		arp_data[sha_offset],
    		arp_data[sha_offset + 1],
    		arp_data[sha_offset + 2],
    		arp_data[sha_offset + 3],
    		arp_data[sha_offset + 4],
    		arp_data[sha_offset + 5]
    		);
    			
    		printf("Sender IP address %d.%d.%d.%d\n",
    		arp_data[spa_offset],
    		arp_data[spa_offset +1],
    		arp_data[spa_offset+2],
    		arp_data[spa_offset+3]);	
    
    		printf("Target Mac address %02X:%02X:%02X:%02X:%02X:%02X\n",
    		arp_data[tha_offset],
    		arp_data[tha_offset + 1],
    		arp_data[tha_offset + 2],
    		arp_data[tha_offset + 3],
    		arp_data[tha_offset + 4],
    		arp_data[tha_offset + 5]
    		);
    
    		printf("Target IP address %d.%d.%d.%d\n",
    		arp_data[tpa_offset],
    		arp_data[tpa_offset +1],
    		arp_data[tpa_offset+2],
    		arp_data[tpa_offset+3]);
    
    	}
    	
    }
    
    
    int pkt_number = 0;
    void ace_pcap_hand(u_char *par, struct pcap_pkthdr *hdr, u_char *data)
    {	
    
    	int i = 0;
        pkt_number++;
        struct ether_header *pEther = (struct ether_header *)data;/*以太网帧头*/
    	u_char *arp_data =  (u_char *)(pEther + 1);
    	
    	printf("\n");
    	printf("pkt_number %d\n",pkt_number);
    	printf("Destination: ");
    	for (i = 0; i <6; i++)
    	{	
    		printf("%.2X",pEther->ether_dhost[i]);
    			if (i != 5)
    				printf(":");
    	}
    	printf("\n");
    	printf("Source: ");
    	for (i = 0; i <6; i++)
    	{	
    		printf("%.2X",pEther->ether_shost[i]);
    			if (i != 5)
    				printf(":");
    	}
    	printf("\n");
    	printf("type 0x%X\n",ntohs(pEther->ether_type));
    	
    	//printf("0x%.2X,0x%.2X,0x%.2X \n",arp_data[0],arp_data[1],arp_data[2]);
    	if (is_arp_protocal(pEther))
    	{
    		printf("====arp====\n");
    		dissect_arp(arp_data);
    		
    	}
    
    }
    
    int main(int argc, char* argv[])
    {
        char errbuf[1024];
        pcap_t *desc = 0;
    
        char *filename = argv[1];
        if (argc != 2)
        {
            printf("usage: ./dissect_pppoe [pcap file]\n");
            return -1;
        }
    
        printf("ProcessFile: process file: %s\n", filename);
        if ((desc = pcap_open_offline(filename, errbuf)) == NULL)
        {   
            printf("pcap_open_offline: %s error!\n", filename);
            return -1; 
        }   
    
        pcap_loop(desc, pkt_number, (pcap_handler)ace_pcap_hand, NULL);
        pcap_close(desc);
        return 0;
    }
    
    

    输出结果:

    在这里插入图片描述

    ARP到底是链路层还是网络层?

    这里给一下我的观点,协议到底所属哪一层,ARP协议能获取到MAC信息,服务于链路层,是不是属于链路层?如果往这方面想的话,ARP是链路层。

    以太网协议类型0x0800是IP协议,0x0806是ARP协议,都是在一个层面上,IP是网络层,那么ARP认为是网络层。

    在《TCP/IP详解卷一》里面就提到了这个问题,感兴趣的小伙伴可以去看看。

    总结

    在发送数据的时候,只知道目标IP地址,不知道MAC地址,而又不能跨越第二、三层实现通讯,这就需要使用地址解析协议(ARP)。

    ARP协议是在RFC826中定义的。RFC是定义各种协议实现标准的官方文档,建议大家在学习网络知识的时候,应当多多参考这些资料,因为它最权威,也最全面。

    参考: https://www.rfc-editor.org/info/rfc826

    在这里插入图片描述

    欢迎关注微信公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。我们一起学习进步! 网盘资料有如下:

    在这里插入图片描述

    展开全文
  • 计算机网络-Wireshark 实验 Wireshark 计算机网络-Wireshark 实验Wireshark 实验一、数据链路层1.实作一熟悉 Ethernet 帧...实作三 掌握 ARP 解析过程二、网络层1.实作一 熟悉 IP 结构2.实作二 IP 的分段与重组3.

    Wireshark抓包以及数据解析(计算机网络实验二)

    目录

    本部分按照数据链路层、网络层、传输层以及应用层进行分类,共有 10 个实验。需要使用协议分析软件 Wireshark 进行,请根据简介部分自行下载安装;
    准备
    请自行查找或使用如下参考资料,了解 Wireshark 的基本使用:
    选择对哪块网卡进行数据包捕获
    开始/停止捕获
    了解 Wireshark 主要窗口区域
    设置数据包的过滤
    跟踪数据流

    一、数据链路层


    数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
    在这里插入图片描述

    1.实作一熟悉 Ethernet 帧结构

    使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等;
    在这里插入图片描述
    问题
    你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因?
    有时校验和会由网卡计算,这时wireshark抓到的本机发送的数据包的校验和都是错误的,因此默认关闭WireShark自身校验。

    2.实作二 了解子网内/外通信时的 MAC 地址

    1.ping 你旁边的计算机(同一子网)

    用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析);记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
    在这里插入图片描述
    在这里插入图片描述

    2. ping qige.io (或者本子网外的主机都可以)

    同时用 Wireshark 抓这些包(可 icmp 过滤);记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
    在这里插入图片描述
    在这里插入图片描述

    3. ping www.cqjtu.edu.cn (或者本子网外的主机都可以)

    同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
    在这里插入图片描述
    在这里插入图片描述

    3.实作三 掌握 ARP 解析过程

    为防止干扰,先使用arp -d * 命令清空 arp 缓存
    ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
    在这里插入图片描述
    在这里插入图片描述
    再次使用 arp -d *命令清空 arp 缓存
    然后ping qige.io(或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
    在这里插入图片描述
    在这里插入图片描述
    请求时的源ip地址与应答时的目的ip相同;应答时的源ip地址与请求的目的ip相同。
    问题
    通过以上的实验,你会发现:
    1.访问本子网的计算机时,目的 MAC 就是该主机的
    2.访问非本子网的计算机时,目的 MAC 是网关的
    请问原因是什么?
    访问非子网计算机时是通过路由器转接的,MAC地址是接入路由器端口的地址,再通过路由器发给相应计算机

    二、网络层

    1.实作一 熟悉 IP 包结构

    使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    问题
    为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
    为传输时识别ip长度节约时间

    2.实作二 IP 包的分段与重组

    根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
    缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等
    在这里插入图片描述
    在这里插入图片描述
    问题
    分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?
    发送到可以支持这个数据报的出链路上面

    3.实作三考察 TTL 事件

    在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等
    在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
    请使用tracert www.baidu.com命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
    在这里插入图片描述
    在这里插入图片描述
    问题
    在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
    此包到源点有50跳

    三、传输层

    1.实作一 熟悉 TCP 和 UDP 段结构

    1.tcp

    用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
    在这里插入图片描述
    在这里插入图片描述

    2.udp

    用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
    在这里插入图片描述
    在这里插入图片描述
    问题
    由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
    端口用于进程的识别,源端口识别发起通信的进程;目的端口识别接收通信的进程;端口可保障通信的正常进行,不至于发生紊乱。

    2.实作二 分析 TCP 建立和释放连接

    打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
    在这里插入图片描述
    请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。tcp连接
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
    tcp告知发送完成,释放链接
    问题1
    去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
    有时候抓到的包用rtsp过滤了之后,存在多个tcp连接,导致用follow tcp stream功能查看时,找不到想看的数据,这时候就要分清楚抓到的包是否包含了多个rtsp连接的数据。然后找到正确的连接,再使用follow tcp stream功能
    问题2
    我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
    因为第二次和第三次合并,如果对方没有数据发给本端,也会发送FIN给本端,用于关闭从对方到本端的连接,这时候就可能出现ACK和FIN合在一起的情况。

    四、应用层

    应用层的协议非常的多,我们只对 DNS 和 HTTP 进行相关的分析

    1.实作一 了解 DNS 解析

    先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
    清除缓存命令:ipconfig/flushdns
    在这里插入图片描述
    解析命令:nslookup qige.io
    在这里插入图片描述
    在这里插入图片描述
    你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
    在这里插入图片描述
    可了解一下 DNS 查询和应答的相关字段的含义;
    DNS查询和应答报文详解.
    问题
    你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
    例如,对域名www.google.com进行解析就会出现这样的结果。产生这样的结果是为了使google这个谷歌服务器的负载得到平衡(因为每天访问这个站点的次数非常多)。因此这个网站就设有好几个计算机,每一个计算机都运行同样的服务器软件。这些计算机的IP地址当然都是不一样的,但它们的域名却是相同的。这样,第一个访问该网址的就得到第一个计算机的IP地址,而第二个访问者就得到第二个计算机的IP地址等等。这样可使每一个计算机的负荷不会太大
    百度例题: 对同一个域名向DNS服务器发出好几次的DNS请求报文后,每一次得到的ip地址都不一样,这可能吗?.

    2.实作二 了解 HTTP 的请求和应答

    打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。
    在这里插入图片描述
    在这里插入图片描述
    请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么(GET)命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    请在你捕获的包中找到 HTTP 应答包,查看应答的代码是(200)什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义
    在这里插入图片描述
    在这里插入图片描述
    问题
    刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?
    服务器告诉浏览器当前请求的资源上一次修改的时间是这个时间。浏览器第二次发送请求的时候,告诉浏览器我上次请求的资源现在还在自己的缓存中,如果你那边这个资源还没有修改,就可以不用传送应答体给我了。服务器根据浏览器传来的时间发现和当前请求资源的修改时间一致,就应答304,表示不传应答体了,从缓存里取。

    五、总结

    通过这次实验,对数据的传输以及网络通信有了更深层次的理解,懂得了网络层的ip包组成,传输层协议的应用;对数据的理解也更加深刻。

    六、 参考资料

    Wireshark 实验.
    fiddler抓包分析http code之304.

    展开全文
  • 地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议...

    看看维基百科的解释
    地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。
    基本功能[编辑]

    在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。 另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。
    原理[编辑]

    在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示。
    主机名称 IP地址 MAC地址
    A 192.168.38.10 00-AA-00-62-D2-02
    B 192.168.38.11 00-BB-00-62-C2-02
    C 192.168.38.12 00-CC-00-62-C2-02
    D 192.168.38.13 00-DD-00-62-C2-02
    E 192.168.38.14 00-EE-00-62-C2-02
    … … …
    以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询 问:“192.168.38.11的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是(00-BB-00-62-C2-02)”。 这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。


    来分析一个ARP包
    在win7下,cmd中
    看看本地ip和mac
    以太网适配器 本地连接:

    连接特定的 DNS 后缀 … … . :
    IPv6 地址 … … … … : 2001:da8:100e:6c99:f4fc:78d9:6fea:d86
    临时 IPv6 地址… … … . : 2001:da8:100e:6c99:990f:bec8:b536:b9
    本地链接 IPv6 地址… … . . : fe80::f4fc:78d9:6fea:d86%14
    IPv4 地址 … … … … : 10.10.16.49
    子网掩码 … … … … : 255.255.252.0
    默认网关… … … … . : fe80::290:1aff:fea3:7de4%14
    10.10.16.1
    再看看arp 缓冲表 arp -a
    这里写图片描述

    那我们就去arp一个arp表中没有的IP,
    在cmd中
    ping 10.10.16.10
    在wireshark中抓包,找到这个包
    “28”,”16.004655000”,”CompalIn_32:60:5d”,”Broadcast”,”ARP”,”42”,”Who has 10.10.16.10? Tell 10.10.16.49”
    看看具体包的情况

    这里写图片描述

    这是帧的头部,目的地址为全FF表示广播询问,源地址本地的mac地址,类型字段是0806h为arp协议字段,
    再看看ARP数据包

    这里写图片描述

    第一个16bit:硬件类型字段,0001h为以太网
    第二个16bit:协议类型,0800h ,为IP协议
    第三个8bit:mac地址长度 6bytes
    第四个8bit:协议地址长度 4bytes
    第五个16bit:操作码字段 0001h 是arp请求
    第六个48bit:发送方的mac地址
    第七个32bit:发送方的协议地址
    第八个48bit:接受方的mac地址;一般全0
    第九个32bit:接收方的协议地址,因为上面指明是IP协议,所以为IP地址,即使ping 后面的IP地址。
    ARP数据包结束;

    再看看回过来的数据包
    “29”,”16.005449000”,”Unispher_a3:7d:e1”,”CompalIn_32:60:5d”,”ARP”,”60”,”10.10.16.10 is at 00:90:1a:a3:7d:e1”
    具体看看包数据

    这里写图片描述

    在以太网头看看有个padding段
    查看维基解释如下
    Allowed Packet Lengths

    Ethernet packets with less than the minimum 64 bytes for an Ethernet packet (header + user data + FCS) are padded to 64 bytes, which means that if there’s less than 64-(14+4) = 46 bytes of user data, extra padding data is added to the packet.
    上面为补充到60个字节,再加上4个crc一共64字节。
    在以太网头部和请求帧的一致,
    具体看看ARP包数据;

    这里写图片描述

    此时,操作码字段为0002h,为应答;
    这时候将IP对应的mac地址发回去。这时得到的mac地址为
    00:90:1a:a3:7d:e1
    看看在win下的arp表中是否有
    接口: 10.10.16.49 — 0xe
    Internet 地址 物理地址 类型
    10.10.16.1 00-90-1a-a3-7d-e1 动态
    10.10.16.44 00-90-1a-a3-7d-e1 动态
    10.10.19.255 ff-ff-ff-ff-ff-ff 静态
    224.0.0.2 01-00-5e-00-00-02 静态
    224.0.0.22 01-00-5e-00-00-16 静态
    224.0.0.252 01-00-5e-00-00-fc 静态
    239.255.255.250 01-00-5e-7f-ff-fa 静态
    255.255.255.255 ff-ff-ff-ff-ff-ff 静态
    确实是刷新了

    展开全文
  • Wireshark抓包实验

    2020-11-18 17:11:43
    本文是通过Wireshark抓包实验来学习数据链路层、网络层、传输层、应用层,了解帧、IP包、段等的结构,对网络有更深的认识。 文章目录摘要数据链路层实作一 熟悉 Ethernet 帧结构实作二 了解子网内/外通信时的 MAC...

    摘要

    本文是通过Wireshark的抓包实验来学习数据链路层、网络层、传输层、应用层,了解帧、IP包、段等的结构,对网络有更深的认识。

    数据链路层

    实作一 熟悉 Ethernet 帧结构

    Wireshark随意抓包

    分析:

    目的MAC为:

    处于包的头部,源MAC地址为:

    至于为什么没有校验字段,原因就是校验和会由网卡计算,这时,wireshark抓到的本机发送的数据包和校验和都是错误的,所以默认关闭了wireshark自己的校验和

    实作二 了解子网内/外通信时的 MAC 地址

    ping旁边机器一下,获得MAC地址

    ping qige.io获得MAC地址

    ping www.cqjtu.edu.cn

    得到如下结论:

    访问本子网的计算机时,目的MAC就是该主机的;但是访问非本子网的计算机时,目的MAC是网关的,思考原因如下:

    如果在同一子网下,需要知道其MAC地址直接进行通信;但如果不在同一子网下,需要知道对方的网关MAC,发送到对方的网关上,然后网关再根据IP目的地址找到对方网络MAC因此,目的MAC是网关的

    另外,如果不在学校机房的话想要构建在同一子网下的主机,我考虑将两台不同的电脑连接在同一热点下,观察他们确实在同一子网(102.168.43.***)下:

    但是,主机相互之间却不能ping通,经过查阅思考并查阅相关资料,得出以下结论:

    主机间的防火墙没关,可以在==Win+R->输入:control->选择网络和Internet->点击网络和共享中心->点击Windows防火墙->关闭(这样也是有风险的)==这样就可以成功ping通对方主机了。

    实作三 掌握 ARP 解析过程

    arp -d *清空arp缓存

    如果出现ARP项删除失败,请求操作需要提升,那么可以右键后,选择Window PowerShell,进入管理员界面,再输入arp -a 即可

    ping旁边的机器,同时抓包

    同样清除缓存,ping qige.io

    得到如下结论:

    如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP,, 那么 ARP 解析将得到网关的 MAC。

    同样像上面的分析,在同一子网下,需要知道对方的MAC,而不在同一子网下,需要知道目的网关的MAC,


    网络层

    实作一 熟悉 IP 包结构

    随意抓包:

    目的MAC和源MAC之后就是IP包,依次为版本、头部长度、服务类型、总长度。对应第三行为生存周期、协议等字段

    头部长度有什么用:

    IP包的头部长度,保证了上层在进行处理时可以直接将IP头部去掉处理段内容

    实作二 IP 包的分段与重组

    ping 202.202.240.16 -l 2000
    

    同时进行抓包,且过滤

    遇到大数据包,就往回报包过大,并丢弃,保证了路由器专注于解决路径问题,包被切成了1500左右大小的小包

    实作三 考察 TTL 事件

    输入命令:

    tracert www.baidu.com
    

    用Wireshark(icmp)追踪并过滤:

    主机发的报文所设置的生存周期在从1开始不断地变大,因为TTL每经过一个路由器的时候都会被减一,当TTL等于0的时候就会被抛弃,并且返回一个超时的ICMP数据包。这时我们就可以知道路由结点的地址了。

    总有一次我们发送最后一个数据刚刚到达目的主机时,数据报的TTL是1,这时候我们就不减1了。


    传输层

    实作一 熟悉TCP UDP段结构

    Wireshark抓包,经过tcp过滤抓到TCP段的结构,如下

    TCP相对于UDP段较为复杂,TCP字段中包含了源端口号、目的端口号、顺序号、确认号、头部长度,特殊位窗口大小、校验和等信息

    抓取UDP包:

    UDP相对于TCP来说简单许多,作为面向非连接的服务,UDP段里只有源端口、目的端口、头部长度、校验和,可以看到,校验和还是忽略的

    实作二 分析TCP建立和释放连接

    访问qige.io 并进行抓包,观察到三次握手:

    三次握手中,一个典型的标志就是SYN,前两次握手SYN都为0,第三次握手SYN为1。

    四次挥手,典型的标志就是,有连词FIN为1,表示一方想要中断连接。


    应用层

    实作一 了解DNS解析

    用nslookuo qige.io 进行解析,然后用Wireshark进行抓包(dns过滤)

    解释字段意思:DNS地53号端口,末尾Response In 表示DNS地53号端口发出回应到114号端口

    为什么请求不止一个:对于部署再服务器上地应用来说,不需要进行任何代码地修改就可以实现不同机器上地应用访问。

    实作二 了解HTTP的请求和应答

    打开浏览器访问qige.io,同时用Wireshark进行抓包:

    可以看到这个请求其命令使用的是POST;

    下面是查阅资料得到的请求字段的具体含义

    Accept:浏览器可接受的MIME类型。
    Accept-Charset:浏览器可接受的字符集。
    Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。
    Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
    Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
    Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
    Content-Length:表示请求消息正文的长度。
    Cookie:设置cookie,这是最重要的请求头信息之一
    From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
    Host:初始URL中的主机和端口。
    If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
    Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
    Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
    User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
    UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU

    响应码分为五种类型,由他们第一位数字表示

    如图,看到抓到的包响应码为304

    总结响应码的五种类型:

    1xx:信息,请求收到,继续处理
    2xx:成功,行为被成功地接受、理解和采纳
    3xx:重定向,为了完成请求,必须进一步执行的动作
    4xx:客户端错误,请求包含语法错误或者请求无法实现
    5xx:服务器错误,服务器不能实现一种明显无效的请求

    下面是收集到的状态代码 状态信息的含义

    100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
    101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新
    200 OK 一切正常,对GET和POST请求的应答文档跟在后面。
    201 Created 服务器已经创建了文档,Location头给出了它的URL。
    202 Accepted 已经接受请求,但处理尚未完成。
    203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。
    204 No Content 没有新文档,浏览器应该继续显示原来的文档。
    205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。
    206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。
    300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。
    301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
    302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。
    303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。
    304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
    305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。
    307 Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。(HTTP 1.1新)
    400 Bad Request 请求出现语法错误。
    401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。
    403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
    404 Not Found 无法找到指定位置的资源。这也是一个常用的应答,
    405 Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)
    406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。
    407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)
    408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)
    409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)
    410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)
    411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)
    412 Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。
    413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。
    414 Request URI Too Long URI太长(HTTP 1.1新)。
    416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)
    500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。
    501 Not Implemented 服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。
    502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
    503 Service Unavailable 服务器由于维护或者负载过重未能应答。
    504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)
    505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本

    问题回答

    为什么发现不少304应答而不是常见的200应答?

    因为第一次访问时成功收到响应,就会返回200,浏览器这时会下载资源文件,记录response header和返回返回时间

    但是当再次请求相同资源的时候,如果没有超过过期时间,直接读取本地缓存资源,大如果国企了就会向服务器发出If-None-Match和If-Modified-Since的请求,

    服务器街道请求后根据Etag的值判断被请求文件有没有做修改,若没修改,返回304,不一致返回200(参考https://blog.csdn.net/sinat_31231955/article/details/81876774)

    总结

    通过对计算机网络的抓包的实验,我对数据链路层、网络层、传输层、应用层以及他们相关的协议有了更加深刻的认识,通过对一些问题的思考,使我对网络有了自己的理解。

    展开全文
  • Wireshark 抓包分析计算机网络各层协议一、Wireshark 抓包实操(1)数据链路层1.1 实作一: 熟悉 Ethernet 帧结构1.2 实作二:了解子网内/外通信时的 MAC 地址1.3 实作三:掌握 ARP 解析过程(2)网络层2.1 实作一:熟悉...
  • wireshark抓包分析各协议

    千次阅读 2019-03-08 10:44:01
    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;...
  • 实验二、计算机网络wireshark抓包实验1、 数据链路层实作一:熟悉 Ethernet 帧结构实作二:了解子网内/外通信时的 MAC 地址实作三: 掌握 ARP 解析过程2、网络层实作一:熟悉 IP 包结构实作二: IP 包的分段与重组实...
  • 初学计算机网络(二):使用Wireshark抓包0. 简介0.1 Wireshark简介0.2 Wireshark下载安装1. 数据链路层1.1 熟悉 Ethernet 帧结构1.2 了解子网内/外通信时的 MAC 地址1.3 掌握 ARP 解析过程2. 网络层2.1 熟悉 IP 包...
  • arp –a //查看arp缓存, 存在IP206及其MAC地址 arp –d //清除缓存Wireshark开始在副网卡抓包,主机ping该目标地址。结束后停止抓包,过滤arp二、协议分析:ARP寻址广播发送,单播回应。Destination:broadcast ...
  • 文章目录TCP\IP协议实践:wireshark抓包分析之链路层与网络层从ping开始链路层之以太网封装ip首部开启ping程序,开始抓包由一个ping的结果引出来的两个协议ARP ICMPARP:地址解析协议原理抓包结果ICMP:Internet控制...
  • 地址解析协议ARP主要是用来将已知的IP地址解析为MAC地址协议。 就是我知道你的IP地址,但是我不知道你的MAC地址时,可以用这个协议知道MAC地址,就像我们点给别人买东西只知道收件人电话,不知道收货地址一样。 ARP...
  • ARP协议抓包分析 – wireshark ARP- Address Resolution Protocol协议,即地址解析协议。该协议功能就是将IP地址解析成MAC地址。 在发送数据的时候,只知道目标IP地址,不知道MAC地址,而又不能跨越第二、三层实现...
  • 定义:ARP(Address Resolution Protocol)地址解析协议的首字母简写,将三层逻辑IP地址解析成二层物理MAC地址 根据网络TCP/IP四层模型,IP属于第三层而MAC属于第二层,他们互相之间是无法直接通讯的,以太网发送IP...
  • ARP报文抓包解析学习

    万次阅读 2018-09-19 17:46:12
    ARP:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。...2、使用wireshark抓包工具,抓取交换机S5700的0/0/1端口的数据流; 3、在PC1上ping...
  • 抓包场景2. 显示过滤ARP包2.1 筛选指定目标协议的ARP包2.2 筛选是ARP请求的包2.3 筛选指定源MAC的ARP包3. ARP显示过滤条件列表 1. 抓包场景      通常是在Windows系统的PC上面进行项目开发,然后使用类UNIX系统...
  • 实验环境:GNS3抓包工具:Wireshark配置:PC1:ip 172.16.0.1/24 PC2:ip 172.16.0.2/24拓扑图: 三、抓包分析 使用PC1 ping PC2,过程中产生了ARP报文,在PC1与SW的e1口抓到的ARP包如下: 1.分析ARP请...
  • 实验3.利用Wireshark分析ARP协议

    千次阅读 2020-05-11 13:15:49
    学会利用Wireshark抓包分析ARP协议 实验环境 Wireshark软件 Windows 计算机 两人共同完成 实验预备知识 1.IP地址与物理MAC地址 图1 IP地址与物理地址的区别 地址解析协议ARP 是解决同一个局域网上的主机...
  • Wireshark网络抓包(三)——网络协议 一、ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址。 IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信; 在通过以太网发生IP...
  • 文章目录实验一 Wireshark的基本操作、以太网链路层帧和ARP地址解析协议分析一. 实验目的及要求二. 实验内容三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)实验步骤:协议分析...
  • ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址。 IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信; 在通过以太网发生IP数据包时,先封装第三层(32位IP地址)和第二层(48...

空空如也

空空如也

1 2 3 4
收藏数 64
精华内容 25
关键字:

wireshark抓包arp解析