Ayuda con servidor
#1

Como puedo poner en mi server que para poder estar adentro del servidor tenga que tener un .exe abierto y si no lo tengas abierto que te saque
Reply
#2

? No creo que sea posible
Igual llevo ratos sin programar algo para samp, talvez estoy desactualizado.
Reply
#3

No se puede con el cуdigo que SAMP nos provee.
Reply
#4

No puedes con lo que SA-MP te ofrece, tienes otras opciones.

1.- Utilizar la misma aplicaciуn y conectarla al servidor (mysql etcйtera)
2.- Utilizar una modificaciуn (un .dll o .asi) para el juego que detecte si la aplicaciуn estб abierta o directamente haga la funciуn de esta.
Reply
#5

Deberбs dar como un requisito entrar al servidor que se instalen un archivo .dll , que este contenga la detecciуn de tal programa.
Reply
#6

Para lo que llego a entender de tъ pregunta, te responderнa que es
  • Imposible (supongo yo).
  • O usar como dice unos de los usuarios arriba, algъn plugin que detecte que es persona tenga el programa necesario para poder entrar.
Reply
#7

Sн es posible, lo ъnico es que tienes que buscar una forma de comunicar el programa con el servidor, por ejemplo, tъ abres el server (SA:MP, realmente) entonces podrбs escuchar supongamos el puerto 9232 (digamos que se te ocurre hacerlo con algъn programa externo o interno de sockets), el cual contestarб el cliente (el .exe) y asн podrнas operar incluso las iptables para agregar lista blanca en caso de que se envнe la peticiуn.

Atenciуn que este mйtodo no es el mбs efectivo, sobre todo porque alguien fбcilmente podrнa falsificar la peticiуn y con ingenierнa inversa conocer el mensaje de lectura y procesamiento, por lo que lo mбs factible si usas un caso como este es crear un HASH que sуlo tъ sepas, o un hash que se sincronice con datos aleatorios del servidor.

Por ejemplo, este es un cliente en python bastante basico:

PHP код:
import time
from socket import 
*
# DATOS DEL SERVER
servidor '83.222.116.222:1111';
partir_ip servidor.split(':');
ip str(partir_ip[0]);
puerto int(partir_ip[1]);
socket socket(AF_INETSOCK_DGRAM);
socket.settimeout(1);
 
socket.sendto('Comprobando estado del servidor .. ', (ippuerto))
try:
    
pack '';
    
pack += 'SAMP';
    
spl ip.split('.');
        
    
pack += chr(int(spl[0]));
    
pack += chr(int(spl[1]));
    
pack += chr(int(spl[2]));
    
pack += chr(int(spl[3]));
    
pack += chr(puerto 0xFF);
    
pack += chr(puerto >> 0xFF);
    
pack += 'c';
        
    
socket.sendto(bytes(pack), (ippuerto))
    
respuesta socket.recv(1024);
    print 
respuesta;
    
# Recive la informacion del server y aca puedes aprovechar un
    # code de solicitud que luego aceptaras desde el server
    # y como te digo, un hash de conexion para evitar conexiones fakes  
except timeout:
    print 
'REQUEST TIMED OUT';
    
socket.close(); 
utilizando el mecanismo del query (en tu caso podrias usar otro o hacer uno tu mismo) pude recibir informacion del servidor atraves de sockets por el protocolo udp:

Paquete 'i';


Paquete 'c':


obviamente esto es solamente un script de prueba.

AGREGO

Una conexion simple de cliente - servidor podria ser esta.

El servidor se inicia .. en escucha a un puerto UDP.



Viene el cliente y se conecta, e intenta ver si el server esta ON haciendo ping por udp



Viene el servidor y recibe la peticion, entonces le dice al cliente que puede entrar (aca le aplicas los valores de comprobacion, haces algun tipo de sistema firewall o algo que ponga OFF el server para todos, muestre ON el server o asigne alguna variable o callback ya adaptandolo a forma de plugin)



Ya fuera de todo viene el cliente y sabe que le aceptaste la conexion:



El codigo utilizado para esta muestra fue el siguiente:

Cliente:

PHP код:
from socket import *
import sys;
import urllib2;
    
# DATOS DEL SERVER
servidor '127.0.0.1:4225';
partir_ip servidor.split(':');
ip str(partir_ip[0]);
puerto int(partir_ip[1]); 
def getMyIP():
    
ret urllib2.urlopen('https://enabledns.com/ip');
    return 
ret.read();
def Main(): 
    
# OBTENEMOS IP DEL SOLICITANTE
    
solicitante getMyIP();
    
sock socket(AF_INETSOCK_DGRAM);
    
sock.settimeout(10);
    while 
1:
        
sock.sendto("('PING', '%s'): Entro al servidor!" solicitante, (ippuerto))
        print 
'Intentando conectar a %s' servidor;
        
        try:
            
sock.sendto("('REQUEST', '%s'): Puedo entrar?" solicitante, (ippuerto))
            
respuesta sock.recvfrom(1024);
            
respuesta respuesta[0];
            if 
respuesta == 'OK':
                print 
'El servidor te ha aceptado la peticion!';
            else:
                print 
'El servidor te ha rechazado la peticion.';
            break;
        
except timeout:
            print 
'REQUEST TIMED OUT';
            break;
    
sock.close();
    
sys.exit();
    
Main(); 
Server:

PHP код:
import re;
import socket;
import sys;
UDP_IP "127.0.0.1"
UDP_PORT 4225;
sock socket.socket(socket.AF_INETsocket.SOCK_DGRAM);
sock.setsockopt(socket.SOL_SOCKETsocket.SO_REUSEADDR1)
print 
'Iniciando servidor ..';
try:
    
sock.bind((UDP_IPUDP_PORT))
except socket.error as msg:
    print 
'El enlace ha fallado. Error: ' str(msg[0]) + ' Mensaje: ' msg[1]
    
sys.exit(); # Cerrar aplicacion;
print 'Servidor iniciado, escuchando en ' UDP_IP ':' str(UDP_PORT);
while 
1:
    
dataaddr sock.recvfrom(1024);
    if(
data != ""):
        
req re.compile("\('([^']+)', '([^']+)'\)").findall(data);
        
gen req[0];
        
ip gen[1];
        
solicitud gen[0];
        if 
solicitud == 'REQUEST':
            
entrante addr[0] + ':' str(addr[1]);
            
            print 
'%s te envia una peticion de entrada' entrante;
            
# Puedes buscar alguna forma de comprobar y ver que la IP cumpla tus requisitos, etc
            
sock.sendto("OK", (addr[0], addr[1])); # LE DECIMOS OKEY
            
print 'Aceptaste a %s en tu servidor.' entrante;
        
elif solicitud == 'PING':
            print 
'Vale, que quieres?';
sock.close(); 
como te dije, es una forma, hay muchas mas sin embargo podrias aprovechar la rapidez del udp y la adaptabilidad en SA:MP, como uno de los unicos problemas tendriamos la vulnerabilidad del protocolo
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)