⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 internet.cc

📁 柯老师网站上找到的
💻 CC
字号:
#include <stdio.h>#include <sys/types.h>#include <netinet/in.h>#include <netinet/in_systm.h>   #include <netinet/ip.h>#include <netinet/ip_icmp.h>#include <netinet/ip_icmp.h>#include <arpa/inet.h>#include "emulate/internet.h"#include "scheduler.h"/*   * in_cksum -- *      Checksum routine for Internet Protocol family headers (C Version) *      [taken from ping.c] */ u_short  Internet::in_cksum(u_short* addr, int len){           register int nleft = len;               register u_short *w = addr;        register int sum = 0;        u_short answer = 0;            /*                               * Our algorithm is simple, using a 32 bit accumulator (sum), we add         * sequential 16 bit words to it, and at the end, fold back all the         * carry bits from the top 16 bits into the lower 16 bits.         */              while (nleft > 1)  {                sum += *w++;                nleft -= 2;        }                   /* mop up an odd byte, if necessary */        if (nleft == 1) {                *(u_char *)(&answer) = *(u_char *)w ;                sum += answer;        }        /* add back carry outs from top 16 bits to low 16 bits */        sum = (sum >> 16) + (sum & 0xffff);     /* add hi 16 to low 16 */        sum += (sum >> 16);                     /* add carry */        answer = ~sum;                          /* truncate to 16 bits */        return(answer);}#include <netinet/in_systm.h>#include <netinet/ip.h>voidInternet::print_ip(ip *ip){           u_short off = ntohs(ip->ip_off);        printf("IP v:%d, ihl:%d, tos:0x%x, id:%d, off:%d [df:%d, mf:%d], "	       "sum:%d, prot:%d\n",                ip->ip_v, ip->ip_hl, ip->ip_tos, ntohs(ip->ip_id),                off & IP_OFFMASK,                (off & IP_DF) ? 1 : 0,                (off & IP_MF) ? 1 : 0,                ip->ip_sum, ip->ip_p);	printf("IP src:%s, ", inet_ntoa(ip->ip_src));	printf("dst: %s\n", inet_ntoa(ip->ip_dst));        printf("IP len:%d ttl: %d\n",                ntohs(ip->ip_len), ip->ip_ttl);}   /* * cons up a basic-looking ip header, no options * multi-byte quantities are assumed to be in HOST byte order */voidInternet::makeip(ip* iph, u_short len, u_char ttl, u_char proto, in_addr& src, in_addr& dst){        u_char *p = (u_char*) iph;        *p = 0x45;      /* ver + hl */        iph->ip_tos = 0;        iph->ip_len = htons(len);        iph->ip_id = (u_short) Scheduler::instance().clock();   // why not?        iph->ip_off = 0x0000;   // mf and df bits off, offset zero        iph->ip_ttl = ttl;        iph->ip_p = proto;        memcpy(&iph->ip_src, &src, 4);        memcpy(&iph->ip_dst, &dst, 4);        iph->ip_sum = Internet::in_cksum((u_short*) iph, 20);        return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -