• 大小: 538KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: 其他
  • 标签: 南大  

资源简介

南京大学计算机网络实验四:静态路由编程实验,C实现。

资源截图

代码片段和文件信息

#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“local_mac);
fscanf(fp“%s“local_mac);
}

/*计算rtt最小、大值,平均值,算术平均数差*/
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)
            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;
}
 
/****统计数据函数****/
void statistics(int sig)
{
    computer_rtt();     //计算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);
}
 
/****检验和算法****/
unsigned short cal_chksum(unsigned short *addrint len)
{
    int nleft = len;
    int sum = 0;
    unsigned short *w = addr;
    unsigned 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

评论

共有 条评论