Exemple #1
0
/*设置ICMP报头*/
int pack(int pack_no)
{       int i,packsize;
        struct icmp *icmp;
        struct timeval *tval;
        icmp=(struct icmp*)sendpacket;
        icmp->icmp_type=ICMP_ECHO;
        icmp->icmp_code=0;
        icmp->icmp_cksum=0;
        icmp->icmp_seq=pack_no;
        icmp->icmp_id=pid;
        packsize=8+datalen;
        tval= (struct timeval *)icmp->icmp_data;
        gettimeofday(tval,NULL);    /*记录发送时间*/
        icmp->icmp_cksum=cal_chksum( (unsigned short *)icmp,packsize); /*校验算法*/
        return packsize;
}
Exemple #2
0
/*设置ICMP报头*/
int pack(int pack_no,char icmp_hd[])
{       
		int i,packsize;
        struct icmp *icmp;
        struct timeval *tval;
        icmp=(struct icmp*)icmp_hd;
        icmp->icmp_type=ICMP_ECHO;
        icmp->icmp_code=0;
        icmp->icmp_cksum=0;
        icmp->icmp_seq=pack_no;
        icmp->icmp_id=9;
        packsize=200;              //发送的报文长度
        tval=(struct timeval *)icmp->icmp_data;
        gettimeofday(tval,NULL);    //记录发送时间
        icmp->icmp_cksum=cal_chksum((unsigned short *)icmp,packsize); //校验算法
        return packsize;
}
int pack(int pack_no, char *sendpacket, pid_t pid)
{
    int packet_size;
    struct icmp *icmp;
    struct timeval *tval;

    icmp = (struct icmp*)sendpacket;
    icmp->icmp_type = ICMP_ECHO;
    icmp->icmp_code = 0;
    icmp->icmp_cksum = htons(0);
    icmp->icmp_seq = htons(pack_no);
    icmp->icmp_id = htons(pid);

    packet_size = PINGS_ICMP_HEADER_SIZE + PINGS_ICMP_DEFAULT_DATA_SIZE;
    tval = (struct timeval *)icmp->icmp_data;
    gettimeofday(tval, NULL);
    icmp->icmp_cksum = cal_chksum((unsigned short *)icmp, packet_size);

    return packet_size;
}
Exemple #4
0
int write_new_file(char *file_buf, int file_len)
{
	puts("===================================");
	puts("recv:");
	t_disbuf(file_buf, file_len);
	puts("===================================");

	int tmp_len = 0;

	int fname_len = 0;
	int fdata_len = 0;

	int write_len = 0;

	char fname[256] = {0};
	char fdata[4096] = {0};

	unsigned short chk_src = 0;
	unsigned short chk_dst = 0;

	memcpy(&fname_len, file_buf, sizeof(int));
	memcpy(fname, file_buf + sizeof(int), fname_len);

	memcpy(&fdata_len, file_buf + sizeof(int) + fname_len, sizeof(int));
	memcpy(fdata, file_buf + 2*sizeof(int) + fname_len, fdata_len);

	memcpy(&chk_src, file_buf + 2*sizeof(int) + fname_len + fdata_len, sizeof(short));

	chk_dst = cal_chksum( (unsigned short *)fdata, fdata_len); /*校验算法*/
	printf("chksum is:%d\n", chk_dst);
	if (chk_src != chk_dst)
	{
		printf("file has not completely transfered\n");
		return -1;
	}
	else
		printf("start to recive file\n");
	


	printf("fname is:%s\n", fname);
	puts("===================================");
	puts("fdata:");
	t_disbuf(fdata, fdata_len);
	puts("===================================");

	FILE *fp = fopen(fname, "w+");  
    if (fp == NULL)  
    {  
        printf("File:\t%s Can Not Open To Write!\n", fname);  
        return -1;  
    }  

	while (tmp_len < fdata_len)
	{
		write_len = fwrite(fdata, sizeof(char), fdata_len, fp);  
		tmp_len = tmp_len + write_len;
    } 

	fclose(fp);
	return 1;
}