[C] Stella Firewall ((Lo encontre gg))

Aquí podrás publicar temas sobre programación en general (C++, JAVA, Python, etc), que no encajen en el apartado Programación Web.
Responder
Avatar de Usuario
wachichorro
Aprendiz
Aprendiz
Mensajes: 126
Registrado: 19 Oct 2014 17:28
Reputación: 4

02 Ago 2017 23:06

Bueno, sin mas nada que decir, navegando en Google, encontré este script del año de los dinosaurios, ni le he probado, pero según tengo entendido servía en su época (No se si ahora también) y se perdió el link con el tiempo.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243

/* Minimal version of Stella Firewall, protection to query flood for SA-MP 0.3e */
/* By Kevin R.V <[email protected]> <[email protected]> */

#include<stdio.h>	//For standard things
#include<stdlib.h>	//malloc
#include<string.h>	//memset
#include<netinet/ip_icmp.h>	//Provides declarations for icmp header
#include<netinet/udp.h>	//Provides declarations for udp header
#include<netinet/tcp.h>	//Provides declarations for tcp header
#include<netinet/ip.h>	//Provides declarations for ip header
#include<sys/socket.h>
#include<arpa/inet.h>
#include<pthread.h>
//V2
#define MAX_QUERYS 350
#define MAX_INCOMINGS 12

void ProcessPacket(unsigned char* , int);
void print_ip_header(unsigned char* , int);
void process_udp_packet(unsigned char * , int);
void *TimerCheck( void *ptr );
void SampQueryPacket(char * szHost, u_short port);
void SampIncomingPackets(char * szHost, u_short port);
void AddIncomingPacket(char * szHost);
int sock_raw;
void Ban(char * szHost);
void Reload();
int CheckIfExists(char * szHost);
void AddQueryPacket(char * szHost);
int tcp=0,udp=0,icmp=0,others=0,igmp=0,total=0,j;
struct sockaddr_in source,dest;

struct userPackets
{	
	char              szHost[30];
	long int   IncomingPackets;
	long int      QueryPackets;
	
};

struct userPackets ddosInfo[700];

int main()
{
	Reload();
	pthread_t thread1;
	pthread_create( &thread1, NULL, TimerCheck, NULL);
	int saddr_size , data_size;
	struct sockaddr saddr;
	struct in_addr in;
	
	unsigned char *buffer = (unsigned char *)malloc(65536); //Its Big!
	
	
	printf("Starting Stella Firewall BETA v0.1...\n");
	sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_UDP);
	if(sock_raw < 0)
	{
		printf("Socket Error\n");
		return 1;
	}
	while(1)
	{
		saddr_size = sizeof saddr;
		data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , &saddr_size);
		if(data_size <0 )
		{
			printf("Recvfrom error , failed to get packets\n");
			return 1;
		}
		ProcessPacket(buffer , data_size);
	}
	close(sock_raw);
	return 0;
}

void ProcessPacket(unsigned char* buffer, int size)
{
	struct iphdr *iph = (struct iphdr*)buffer;
	++total;
	switch (iph->protocol)
	{
		
		case 17: //UDP Protocol
			++udp;
			process_udp_packet(buffer , size);
			break;
		
		default: 
		break;
	}
}

void process_udp_packet(unsigned char *Buffer , int Size)
{
	
	unsigned short iphdrlen;
	
	struct iphdr *iph = (struct iphdr *)Buffer;
	iphdrlen = iph->ihl*4;
	
	memset(&source, 0, sizeof(source));
	source.sin_addr.s_addr = iph->saddr;
	
	memset(&dest, 0, sizeof(dest));
	dest.sin_addr.s_addr = iph->daddr;
	struct udphdr *udph = (struct udphdr*)(Buffer + iphdrlen);
	char * Packet = &Buffer[4] + iphdrlen + sizeof udph;
	int len_pkt = ( Size - sizeof udph - iph->ihl * 4 );
	Packet[len_pkt] = '\0';
	
	if (Packet[0] == 0x28)
	{
			if ( ntohs(udph->len) == 12 )
			{
				SampIncomingPackets(inet_ntoa(source.sin_addr),ntohs(udph->dest));
			}
	}
	
	else if ( Packet[0] == 'S' && Packet[1] == 'A' && Packet[2] == 'M' && Packet[3] == 'P' )
	{
		SampQueryPacket(inet_ntoa(source.sin_addr),ntohs(udph->dest));
	} 
}

void Reload()
{
	int i = 0;
	for(i = 0; i<700; i++)
	{
		strcpy(ddosInfo[i].szHost, "127.0.0.1");
		ddosInfo[i].IncomingPackets = 0;
		ddosInfo[i].QueryPackets = 0;
	}
	
	
}
int CheckIfExists(char * szHost)
{
	int i = 0;
	for(i = 0; i<700; i++)
	{
		if ( strcmp(ddosInfo[i].szHost, szHost) == 0 )
		return i;
	}
	return -1;
}

void *TimerCheck( void *ptr )
{
	while(1)
	{
		sleep(6);
		Reload();
	}
	
}

void Ban(char * szHost)
{
	printf("Attack from: %s, blocking it...\n", szHost);
	char cmd[50];
	memset(cmd, 0, sizeof(cmd));
	sprintf(cmd, "iptables -A INPUT -s %s -j DROP", szHost);
	system(cmd);
}


void AddQueryPacket(char * szHost)
{
	
	int check = CheckIfExists(szHost);
	if ( check != -1)
	{
		ddosInfo[check].QueryPackets++;
		if ( ddosInfo[check].QueryPackets > MAX_QUERYS )
		Ban(ddosInfo[check].szHost);
	}
	else
	{
		int i = 0;
		for(i = 0; i<700; i++)
		{
			if ( strcmp(ddosInfo[i].szHost, "127.0.0.1") == 0 )
			{
				strcpy(ddosInfo[i].szHost, szHost);
				ddosInfo[i].IncomingPackets = 0;
				ddosInfo[i].QueryPackets = 1;
				break;
			}
		}
		
	}
	
	
}

void AddIncomingPacket(char * szHost)
{
	
	int check = CheckIfExists(szHost);
	if ( check != -1)
	{
		ddosInfo[check].IncomingPackets++;
		 
		if ( ddosInfo[check].IncomingPackets > MAX_INCOMINGS )
		Ban(ddosInfo[check].szHost);
	}
	else
	{
		int i = 0;
		for(i = 0; i<700; i++)
		{
			if ( strcmp(ddosInfo[i].szHost, "127.0.0.1") == 0 )
			{
				strcpy(ddosInfo[i].szHost, szHost);
				ddosInfo[i].IncomingPackets = 1;
				ddosInfo[i].QueryPackets = 0;
				break;
			}
		}
		
	}	
	
	
}

void SampQueryPacket(char * szHost, u_short port)
{
	if ( port == 9355 )
	{
		AddQueryPacket(szHost);
	}
	
}

void SampIncomingPackets(char * szHost, u_short port)
{
	if ( port == 9355 )
	{
		AddIncomingPacket(szHost);
	}
}
  Cantidad de llaves: Abiertas(32)-Cerradas(32) | Lineas Totales: 243
Avatar de Usuario
KRISSTI4N
Junior
Junior
Mensajes: 663
Registrado: 15 Nov 2014 21:14
Ubicación: ¡Chile!
Reputación: 24

02 Ago 2017 23:54

"SA-MP 0.3e" que recuerdos jaja. Buen aporte amigo, quizá falto un poquito mas de información ya que alguien que no sepa no sabrá de que trata.
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

03 Ago 2017 14:13

Recuerda que debes detallar exactamente que hace el código aportado, que requiere, etcétera.

No lo leí entero pero con algunas que otras funciones que leí ya me hago una idea de como funciona....
Ayuda como un anti bot spam(servidores llenos y toda esa basura).
saveiro
Aprendiz
Aprendiz
Mensajes: 1
Registrado: 06 Jul 2017 16:09
Reputación: 0

04 Ago 2017 08:30

Stella Firewall, es un Firewall que creó n3ptun0 hace años, su propio nombre lo dice, firewall, en su momento paraba los ataques DDoS a los servidores. No sé si el código aún funciona.

Saludos
Avatar de Usuario
CorpZomboT(c)
Aprendiz
Aprendiz
Mensajes: 70
Registrado: 17 Jun 2017 12:01
Reputación: 0

08 Ago 2017 20:35

Estas son las cosas que realmente merecen la pena liberar... No gamemodes que ni se van a usar en un servidor.
Básicamente es como un anti DDOS attack, pero no se testeó según decís, y puede que me dé fallas con bots...
Buen aporte..
Visita mi canal de YouTube
Todo aquella persona que en una guía use términos como variables, natives, callbacks, es por que no está intentando que entendamos su guía, intenta presumir lo que sabe
Juan88
Aprendiz
Aprendiz
Mensajes: 32
Registrado: 09 Nov 2016 23:58
Reputación: 0

30 Nov 2017 16:04

Me sale 1 error
ChrisPa
Mensajes: 101
Registrado: 19 Abr 2018 20:37
Ubicación: Mexico
Contactar:
Reputación: -5

25 Abr 2018 14:30

Buen aporte tal vez lo use, dejando créditos claro.
Si te ayude por favor déjame +1 =) Se agradece, yo are lo mismo cuando tu me ayudes

Avatar de Usuario
#Fede
Moderador Global
Moderador Global
Mensajes: 3133
Registrado: 12 Ene 2015 06:32
Ubicación: Montevideo, Uruguay.
Reputación: 75

01 Jun 2018 20:09

Por la re-estructuración del foro, muevo el tema a la sección indicada.
Estoy fuera de SA-MP, no me envíen mensajes privados invitándome a proyectos.


scriptnoob escribió:Cada día se va mejorando el foro, nuestro objetivo es como el de una empresa:

Misión: Brindar ayuda y aportes a los usuarios.
Visión: Ser la página de mayor calidad de servicio de soporte referidos a lenguajes de programación.
Lee las reglas del foro para evitar ser sancionado




Responder