PHP - sockets y captura de IP

 
Vista:
Imágen de perfil de Angel Manuel

sockets y captura de IP

Publicado por Angel Manuel (6 intervenciones) el 24/02/2018 10:42:23
Hola:

Estoy intentando obtener las IPS de la gente que entra en mi servidor por un determinado puerto, pero me sale un error y no entiendo el porqué.

Este es el código:

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
#!/usr/local/bin/php -q
<?php
error_reporting(E_ALL);
 
/* Permitir al script esperar para conexiones. */
set_time_limit(0);
 
/* Activar el volcado de salida implícito, así veremos lo que estamos obteniendo
 * mientras llega. */
ob_implicit_flush();
 
/* Para Hearthstone */
 
$address = '192.168.1.147';
$port = 3724;
 
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() falló: razón: " . socket_strerror(socket_last_error()) . "\n";
}
 
if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() falló: razón: " . socket_strerror(socket_last_error($sock)) . "\n";
}
 
if (socket_listen($sock, 5) === false) {
    echo "socket_listen() falló: razón: " . socket_strerror(socket_last_error($sock)) . "\n";
}
 
do {
    	$Fichero = "log.txt"; //nombre del fichero donde guardamos los informes 
	$ip = $_SERVER["REMOTE_ADDR"] : "\t"; //guarda en la variable el ip 
	$fecha = date("Y-m-d;h:i:s") : "\t"; //fecha y hora (por lo general del servidor) 
	$sistema = $_SERVER['HTTP_USER_AGENT'] : "\t"; //esto nos genera varios datos del navegador y del sistema operativo 
	$conproxy = $_SERVER["HTTP_X_FORWARDED_FOR"] : "\n"; //en caso de usar proxy para esconderse aqui estaria el ip real 
	$log = "FECHA: $fecha : SISTEMA: $sistema IP: $ip IPPROXY: $conproxy";
	$fp = fopen($Fichero, "a" );
	fwrite($fp, $log);
	fclose($fp);
} while (true);
 
socket_close($sock);
?>

¿Qué es lo que tengo mal?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

sockets y captura de IP

Publicado por xve (6935 intervenciones) el 25/02/2018 09:20:05
Hola Angel, no comentas el error que te da, pero segun veo el código las lineas 31 a la 34 tienes un error con los dos puntos...

En vez de:
1
$ip = $_SERVER["REMOTE_ADDR"] : "\t";
Creo que tendria que ser (si lo que quieres es concatenar):
1
$ip = $_SERVER["REMOTE_ADDR"]."\t";


Es ese el error que te da?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

sockets y captura de IP

Publicado por Angel Manuel (6 intervenciones) el 25/02/2018 10:07:33
Este es el error que me da:

#!/usr/local/bin/php -q
Fatal error: Uncaught Error: Call to undefined function socket_create() in C:\xampp\htdocs\IPSHearthstone.php:20 Stack trace: #0 {main} thrown in C:\xampp\htdocs\IPSHearthstone.php on line 20

y este el código reescrito:

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
#!/usr/local/bin/php -q
<?php
error_reporting(E_ALL);
 
/* Permitir al script esperar para conexiones. */
set_time_limit(0);
 
/* Activar el volcado de salida implícito, así veremos lo que estamos obteniendo
 * mientras llega. */
ob_implicit_flush();
 
/* Para Hearthstone */
$address = '192.168.1.147';
$port = 3724;
$eCreado=null;
$eBindeado=false;
$eEscuchando=false;
$eAceptado=false;
//Creamos el socket
$sockHS=socket_create(AF_INET, SOCK_STREAM, 2);
//Comprobamos si se creó el socket
$eCreado=$sockHS;
if($eCreado!=false){
	echo "socket creado correctamente" . "\n";
}
else{
	echo "Error al crear el socket" . "\n";
}
//Anclamos el socket:
$eBindeado=socket_bind($sockHS,$address,$port);
if($eBindeado==true){
	echo "socket anclado correctamente" . "\n";
}
else{
	echo "Error al anclar el socket" . "\n";
}
//Dejamos el socket a la escucha:
$eEscuchando=socket_listen($sockHS,500);
if($eEscuchando==true){
	echo "Socket escuchando en el puerto " . $port . "\n";
}
else{
	echo "imposible escuchar en el puerto indicado \n";
}
//Aceptamos conexiones entrantes:
do{
$eAceptado=sockect_accept($socketHS);
if($eAceptado!=false){
    $Fichero = "log.txt"; //nombre del fichero donde guardamos los informes 
	$ip = $_SERVER["REMOTE_ADDR"] . "\t"; //guarda en la variable el ip 
	$fecha = date("Y-m-d;h:i:s") . "\t"; //fecha y hora (por lo general del servidor) 
	$sistema = $_SERVER['HTTP_USER_AGENT'] . "\t"; //esto nos genera varios datos del navegador y del sistema operativo 
	$conproxy = $_SERVER["HTTP_X_FORWARDED_FOR"] . "\n"; //en caso de usar proxy para esconderse aqui estaria el ip real 
	$log = "FECHA: $fecha : SISTEMA: $sistema IP: $ip IPPROXY: $conproxy";
	$fp = fopen($Fichero, "a" );
	fwrite($fp, $log);
	fclose($fp);
}
else{
	echo "No se pudo aceptar la conexion \n";
}
socket_close($eAceptado);
}while(true);
?>

Es decir, no me coge el socket_create. He probado poniendo también con SOL_TCP y tampoco me lo pilla. ¿Puede ser porque la versión de mi php no sea la última de todas?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

sockets y captura de IP

Publicado por xve (6935 intervenciones) el 25/02/2018 11:04:49
Huy que extraño, yo lo he probado en Linux y no me da error... No se si tendra algo que ver, pero sobre que sistema operativo lo estas probando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

sockets y captura de IP

Publicado por xve (6935 intervenciones) el 25/02/2018 19:22:04
Prueba a modificar el archivo php.ini y descomentar la linea (quitar el punto y coma del inicio):
1
;extension=php_sockets.dll

Comprueba que realmente tengas dicha dll

Coméntanos si te ha funcionado, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar