程式設計例項 linux下的乙太網簡單網路流量分析

2021-04-23 01:10:50 字數 2163 閱讀 1828

/*

name:ether.c

func:print ether protocol mac address flow

compile: gcc ether.c -o ether -lpcap

platform:linux/unix 

*/#include 

#include 

#include 

#include 

#include 

#include 

#define maxstringsize    1500

#define default_snaplen  68

//stp protocol 

u_int8_t dmac[6]=;

static

int ether_counter=0;

int tflag=0;

//count the  size of the packet

unsigned int arp_array[1024],ip_array[1024],rarp_array[1024],/

stp_array[1024],other_array[1024];

unsigned int arp_c=0,ip_c=0,rarp_c=0,stp_c=0,other_c=0;

double  arp_flow,ip_flow,rarp_flow,stp_flow,other_flow;

#define hwaddr(addr) /

((unsigned char *)&addr)[0], /

((unsigned char *)&addr)[1], /

((unsigned char *)&addr)[2], /

((unsigned char *)&addr)[3], /

((unsigned char *)&addr)[4], /

((unsigned char *)&addr)[5]

void usage();

char *program_name;

int cap_time=1;

double cap_sum(unsigned int array, unsigned int c)

void sig_alarm(int sig)

void print_ethertype(struct ether_header *eth,const

struct pcap_pkthdr *h)

if(i == 6)

else

//break;

}fflush(stdout);

}void eth_printer(u_char *user, const

struct pcap_pkthdr *h, const u_char *p)

int main(int argc, char **argv)

}return 0;

case

'i':

if (optarg[0] == '0' && optarg[1] == 0)

if ((devnum = atoi(optarg)) != 0) 

}device = devpointer->name;

break;

}device = optarg;

break;

case

't':

cap_time=atoi(optarg);

tflag=1;

break;

default:

usage();       

break;

}if((pd = pcap_open_live(device, default_snaplen, 1, 1000, ebuf)) == null)

signal(sigalrm, sig_alarm);

if(tflag==1)

alarm(cap_time);

struct bpf_program fcode;

pcap_compile(pd, &fcode, null, 1, 0);

pcap_setfilter(pd, &fcode);

if(pcap_loop(pd, -1, eth_printer, null) < 0)

pcap_close(pd);

return 0;

}void usage()

簡析乙太網的幀格式

下面的 顯示了在以1500個位元組為 mtu傳輸 時的完整幀格式 前導碼 作為同步用 幀開始符 標誌幀的開始 以太型別 標誌負載中資料的型別 例如,乙個0x0800的以太型別說明這個幀包含的是 ipv4 資料報。同樣 的,乙個0x0806的以太型別說明這個幀是乙個 arp幀,0x8100說明這是乙個...

乙太網的定址

乙太網的定址 在乙個乙太網內,連線了許多臺 pc機,要把 message從a 主機傳送到 b主機,一般要通過 ip層作為互通。但是對於一台主機來說,其底層硬體和 ip位址並沒有直接的關係,也就是說,乙個 ip資料報從a到 b,a去找到目標 b不是說找到b的 ip就搞定了,更準確的說是要找到b的 ma...

Linux系統中的乙太網連線

1.在linux中,乙太網連線介面被命令為 eth0,eth1等,其中0,1表示網絡卡編號。2.lspci來檢視網絡卡硬體資訊 usb則是lsusb 3.ifconfig來檢視介面資訊 ifconfig a來檢視所有介面 ifconfig eth0來檢視特定eth0介面資訊。ifup和ifdown來...