資源簡介
南京大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)四:靜態(tài)路由編程實(shí)驗(yàn),C實(shí)現(xiàn)。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
?
#define?PACKET_SIZE?4096
#define?MAX_WAIT_TIME???5
#define?MAX_NO_PACKETS??10000
#define?MAX_ARP_SIZE?100
?
?
char?*addr[2];
char?sendpacket[PACKET_SIZE];
char?recvpacket[PACKET_SIZE];
int?sockfddatalen?=?56;
int?nsend?=?0?nreceived?=?0;
double?temp_rtt[MAX_NO_PACKETS];
double?all_time?=?0;
double?min?=?0;
double?max?=?0;
double?avg?=?0;
double?mdev?=?0;
char?local_mac[18];
struct?sockaddr_ll?dest_addr;
struct?sockaddr_in?from;
struct?timeval?tvrecv;
struct?timeval?tval;
pid_t?pid;
?
struct?arp_table_item
{
char?ip_addr[16];
char?mac_addr[18];
}arp_table[MAX_ARP_SIZE];
int?arp_item_index=0;
void?statistics(int?sig);
void?send_packet(char?*dest);
void?recv_packet(char?*dest);
void?computer_rtt(void);
void?tv_sub(struct?timeval?*outstruct?timeval?*in);
int?pack(char?*dest);
int?unpack(char?*bufint?len);
unsigned?short?cal_checksum(unsigned?short?*addrint?len);
?
void?init_arp()
{
FILE?*fp=fopen(“arp_table““r“);
if(!fp)
{
printf(“can‘t?open?arp_table!\n“);
exit(0);
}
fscanf(fp“%s“arp_table[0].ip_addr);
fscanf(fp“%s“arp_table[0].mac_addr);
++arp_item_index;
while(!feof(fp))
{
fscanf(fp“%s“arp_table[arp_item_index].ip_addr);
fscanf(fp“%s“arp_table[arp_item_index].mac_addr);
++arp_item_index;
}
}
init_device()
{
FILE?*fp=fopen(“device““r“);
if(!fp)
{
printf(“can‘t?open?the?device!\n“);
exit(0);
}
fscanf(fp“%s“l(fā)ocal_mac);
fscanf(fp“%s“l(fā)ocal_mac);
}
/*計(jì)算rtt最小、大值,平均值,算術(shù)平均數(shù)差*/
void?computer_rtt()
{
????double?sum_avg?=?0;
????int?i;
????min?=?max?=?temp_rtt[0];
????avg?=?all_time/nreceived;
?
????for(i=0;?i ????????if(temp_rtt[i]?????????????min?=?temp_rtt[i];
????????else?if(temp_rtt[i]?>?max)
????????????max?=?temp_rtt[i];
?
????????if((temp_rtt[i]-avg)?0)
????????????sum_avg?+=?avg?-?temp_rtt[i];
????????else
????????????sum_avg?+=?temp_rtt[i]?-?avg;?
????????}
????mdev?=?sum_avg/nreceived;
}
?
/****統(tǒng)計(jì)數(shù)據(jù)函數(shù)****/
void?statistics(int?sig)
{
????computer_rtt();?????//計(jì)算rtt
????printf(“\n------?%s?ping?statistics?------\n“addr[0]);
????printf(“%d?packets?transmitted%d?received%d%%?packet?losstime?%.f?ms\n“
????????nsendnreceived(nsend-nreceived)/nsend*100all_time);
????printf(“rtt?min/avg/max/mdev?=?%.3f/%.3f/%.3f/%.3f?ms\n“
????????minavgmaxmdev);
????close(sockfd);
????exit(1);
}
?
/****檢驗(yàn)和算法****/
unsigned?short?cal_chksum(unsigned?short?*addrint?len)
{
????int?nleft?=?len;
????int?sum?=?0;
????unsigned?short?*w?=?addr;
????unsigned?sh
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-05-01?08:55??static-route-master\
?????文件?????????600??2017-05-01?08:55??static-route-master\README.md
?????目錄???????????0??2017-05-01?08:55??static-route-master\report\
?????文件??????580253??2017-05-01?08:55??static-route-master\report\lab4_151220055(李曉霖).pdf
?????目錄???????????0??2017-05-01?08:55??static-route-master\source?code\
?????目錄???????????0??2017-05-01?08:55??static-route-master\source?code\configuration.file\
?????文件??????????30??2017-05-01?08:55??static-route-master\source?code\configuration.file\arp_table
?????文件??????????24??2017-05-01?08:55??static-route-master\source?code\configuration.file\device
?????文件??????????86??2017-05-01?08:55??static-route-master\source?code\configuration.file\route_info
?????目錄???????????0??2017-05-01?08:55??static-route-master\source?code\source.c\
?????文件???????11114??2017-05-01?08:55??static-route-master\source?code\source.c\p1.c
?????文件????????2488??2017-05-01?08:55??static-route-master\source?code\source.c\p2.c
?????文件????????7383??2017-05-01?08:55??static-route-master\source?code\source.c\r.c
評論
共有 條評論