亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

自己動(dòng)手學(xué)TCP/IP--以太網(wǎng)幀

系統(tǒng) 1847 0

數(shù)據(jù)鏈路層主要的功能

  • 把網(wǎng)絡(luò)層的包封裝成幀
  • 對(duì)幀的校驗(yàn)和確認(rèn)
  • 流量的控制

數(shù)據(jù)鏈路層生成以太網(wǎng)幀,以太網(wǎng)幀的主要格式如下。


太網(wǎng)幀的傳輸大小是由傳輸媒介決定的,數(shù)據(jù)幀的大小是64—1518。幀頭14個(gè)字節(jié),分別是目標(biāo)MAC地址

(6個(gè)字節(jié))+源MAC地址(6個(gè)字節(jié))+協(xié)議類(lèi)型(2個(gè)字節(jié)),幀尾是32位的CRC冗余校驗(yàn)。對(duì)于兩個(gè)字

節(jié)協(xié)議字段,0×0800主要用于IP協(xié)議,還有一些其他的網(wǎng)絡(luò)協(xié)議,比如Novell IPX等。

這里先介紹以太網(wǎng)幀頭格式,用libcap抓出來(lái)的包最后的CRC冗余校驗(yàn)已經(jīng)在物理網(wǎng)卡上完成。下面是代碼

    #include <pcap.h>
#include <stdio.h>
#include <stdlib.h> 				
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>		
#include <net/ethernet.h>
#include <netinet/ip_icmp.h>	//Provides declarations for icmp header
#include <netinet/udp.h>		//Provides declarations for udp header
#include <netinet/tcp.h>		//Provides declarations for tcp header
#include <netinet/ip.h>		//Provides declarations for ip header

#define BUFFER_SIZE 2048
#define HIGH4(a) (((a&0xf0))>>4)
#define LOW4(a) (a&0x0f)

int size ;

void process_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *buffer);

void print_mac(const u_char *packet_buffer);
void mac_to_str(char *szMac, unsigned char mac[6]);

int main(int argc,char *argv[])
{
	pcap_if_t *alldevsp , *device;
	pcap_t *handle; //Handle of the device that shall be sniffed

	char errbuf[100] , *devname , devs[100][100];
	int count = 1 , n;

	//First get the list of available devices
	printf("Finding available devices ... ");
	if( pcap_findalldevs( &alldevsp , errbuf) )
	{
		printf("Error finding devices : %s" , errbuf);
		exit(1);
	}
	printf("Done");

	//Print the available devices
	printf("\nAvailable Devices are :\n");
	for(device = alldevsp ; device != NULL ; device = device->next)
	{
		printf("%d. %s - %s\n" , count , device->name , device->description);
		if(device->name != NULL)
		{
			strcpy(devs[count] , device->name);
		}
		count++;
	}

	//Ask user which device to sniff
	printf("Enter the number of the device you want to sniff : ");
	scanf("%d" , &n);
	devname = devs[n];

	//Open the device for sniffing
	printf("Opening device %s for sniffing ... " , devname);
	handle = pcap_open_live(devname , 65536 , 1 , 0 , errbuf);

	if (handle == NULL)
	{
		fprintf(stderr, "Couldn't open device %s : %s\n" , devname , errbuf);
		exit(1);
	}
	printf("Done\n");

	//Put the device in sniff loop
	pcap_loop(handle , -1 , process_packet , NULL);

	return 0;
}

void process_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *buffer)
{
	size = header->len;
	print_mac(buffer);
}

void print_mac(const u_char *packet_buffer)
{
	struct ethhdr *ethernet_header = NULL;			//ether header	
	char sour_mac[40] = {'\0'};			//<linux/if_ether.h>
	char des_mac[40] = {'\0'};			//#define ETH_ALEN   6
	ethernet_header = (struct ethhdr *)packet_buffer;
	
	mac_to_str(sour_mac,ethernet_header->h_source);
	mac_to_str(des_mac,ethernet_header->h_dest);
	printf("length of ethernet_head : %d \n",sizeof(struct ethhdr));
	printf("des_MAC : %s\n",des_mac);
	printf("sour_MAC : %s\n",sour_mac);
	printf("Protocal : %x\n",ntohs(ethernet_header->h_proto));
}

//MAC地址翻譯
void mac_to_str(char *szMac, unsigned char mac[6])
{
	sprintf(szMac, "%X%X:%X%X:%X%X:%X%X:%X%X:%X%X"
			, HIGH4(mac[0]), LOW4(mac[0])
			, HIGH4(mac[1]), LOW4(mac[1])
			, HIGH4(mac[2]), LOW4(mac[2])
			, HIGH4(mac[3]), LOW4(mac[3])
			, HIGH4(mac[4]), LOW4(mac[4])
			, HIGH4(mac[5]), LOW4(mac[5])
			);
}
  

$ gcc get_mac.c -o get_mac -lpcap

自己動(dòng)手學(xué)TCP/IP--以太網(wǎng)幀


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日本一片免费观看高清完整 | 久久99国产视频 | 国产精品自拍视频 | 国产亚洲精品国看不卡 | 欧美国产精品不卡在线观看 | 国产精品网址你懂的 | 伊人精品视频 | 久久久这里有精品999 | 久久精品国产亚洲黑森林 | 日日夜夜精品免费视频 | 国产成人综合在线视频 | 久久99久久99精品免观看动漫 | 国产精品久草 | 亚洲精品国产国语 | 91在线视频免费 | 久草免费在线视频观看 | 亚洲区在线播放 | bt 另类 专区 欧美 制服 | 欧美成人精品福利在线视频 | 国产精品每日更新在线观看 | a亚洲欧美中文日韩在线v日本 | 色综合综合| 99热这里只精品99re66 | 四虎在线网站 | 国产福利在线视频 | jizzjizz欧美69巨大 | 婷婷视频网站 | 精品免费久久久久久久 | 欧美在线视频在线观看 | 日韩欧美久久一区二区 | 亚洲一区二区中文字5566 | 香蕉视频免费在线播放 | 欧美洲大黑香蕉在线视频 | 天堂va亚洲va欧美va国产 | 国内精品久久久久影院免费 | 国产成人精品亚洲一区 | 涩涩视频免费看 | 久草视频在线免费播放 | 免费日本黄色网址 | 国产一国产一级毛片视频在线 | 精品视频一区二区三区免费 |