Obtener LISTA de IP'S de Movistar TV mediante Script Python

#1
Gracias a spacezed , tenemos a nuestra disposición un estupendo script ejecutable para obtener la lista de ip's de Imagenio disponibles en un determinado rango dentro de las propias ip's de Movistar TV (239.0.X.X)

El programa a utilizar es Python , que está para descargar aquí

Los pasos a ejecutar son:

1º Descargar e instalar el programa.La versión 2.7.5 Installer funciona correctamente

2º Abrir el bloc de notas y copiar-pegar el texto del script tal cual (lo que está dentro de código)

Código:
import socket
import struct
import datetime



now = datetime.datetime.now()
f = open('channels_' + str(now.strftime("%Y-%m-%d__%H_%M_%S")) + ".m3u",'a')
f.write("#EXTM3U\n")


for i in range(0,9):
	for e in range(0,254):
		MCAST_GRP = '239.0.' + str(i) + '.' + str(e)
		MCAST_PORT = 8208
		
		try:
			sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
			sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
			sock.settimeout(1)
			sock.bind(('', MCAST_PORT))
			mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

			sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
		
			print ("checking " + MCAST_GRP + ":" + str(MCAST_PORT) + "...")
			
			if sock.recv(128):
				f.write("#EXTINF:0,rtp://" + MCAST_GRP + ":" + str(MCAST_PORT) + '\n')
				f.write("rtp://@" + MCAST_GRP + ":" + str(MCAST_PORT) + '\n')
		except:
			pass
f.close

El script original hace un barrido desde 239.0.0.0 a 239.0.254.254.Aquí lo he reducido hasta 239.0.9.X porque si no,tardaría una eternidad en buscar..En cualquier caso podéis modificarlo en la línea for i in range(0,9)

Si veis que surge algún problema con el script copiado desde aquí o aparece algún error de sintaxis o no inicia el script o se cierra, mejor entráis en http://pastebin.com/f9q8NqEM y copiais-pegais directamente lo mismo pero a partir de RAW Paste Data (acuérdate de cambiar el 254 de la línea for i in range(0,254) por otro si quieres un escaneado más corto)

3º Una vez copiado en el bloc de notas , lo guardamos como busca_canales.py que es la extensión de nuestro programa python instalado.

4º Abrimos el archivo y automaticamente se nos abrirá la consola y empezará a buscar..



5º Si todo va correctamente,nos generará las ip's disponibles (sin nombre del canal) en un archivo .m3u llamado channels_fecha_hora, que podemos abrir como siempre con VLC


Recuerda que tienes que tener el PC configurado para ver los canales como hacemos con el VLC,es decir, con la IP 10. del deco +1,máscara 255.248 y puerta de enlace del router.

En el caso de tener las ip's configuradas de forma automática (DHCP o Fibra) o con las típicas 192.168. , puede que tengas que desactivar el filtro IGMP para extraer las ip's correctamente.

Formas de desactivar filtro IGMP:

Routers antiguos (Xavi,Zyxel)->

Xavi : No tiene filtro IGMP
Zyxel: Por telnet Aquí

Routers más modernos (ADB p.e.)->

Se puede desactivar via web http://192.168.1.1/main.html con el User 1234 y la contraseña que tengamos

Dentro del menú, nos vamos a Advance Setup,Wan Service,Interface ipoa0 ,EDIT y desmarcamos Enable IGMP Multicast.Next y Apply/Save.


Problemas:

"El script ni se abre ,se cierra directamente" --> Posible problema de copiado del código,hazlo a través de la página de pastebin e inténtalo de nuevo

"Sólo me extrae una lista m3u con #EXTM3U dentro" --> asegúrate de desactivar el filtro IGMP correctamente y prueba de nuevo . A veces puede quedar la conexión colgada o no aplica correctamente.Reinicia el router si pasa esto y vuelve a intentarlo.
 
#2
Si no genera los nombres d elso canales, ¿como sabemso que canales son, en el caso, por ejemplo, de canales temporales, que, cuando no emiten contedo, emite el Promocional?.
 
#3
El usuario efer33 nos ha facilitado una modificación del script que parece que va mejor para extraer las ip's

Código:
import socket
import struct
import datetime



now = datetime.datetime.now()
f = open('channels_' + str(now.strftime("%Y-%m-%d__%H_%M_%S")) + ".m3u",'a')
f.write("#EXTM3U\n")


for i in range(0,10):
	for e in range(0,254):
		MCAST_GRP = '239.0.' + str(i) + '.' + str(e)
		MCAST_PORT = 8208
		
		try:
			sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
			sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
			sock.settimeout(1)
			sock.bind(('', MCAST_PORT))
			mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

			sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
		
			print ("checking " + MCAST_GRP + ":" + str(MCAST_PORT) + "...")
			
			if sock.recv(10240):
				f.write("#EXTINF:0,rtp://" + MCAST_GRP + ":" + str(MCAST_PORT) + '\n')
				f.write("rtp://@" + MCAST_GRP + ":" + str(MCAST_PORT) + '\n')
				f.flush()
		except:
			pass

f.close
 
#4
Hola a todos aqui de nuevo para dejaros otro script, esta vez este se encarga de obtener la lista de canales con su ID original y NOMBRE desde los servidores multicast de Movistar dependiendo de vuestra localizacion :p

Es un poco tosco pero funciona, aqui os dejo el link:

Version Mejorada: http://pastebin.com/rmdx2x1b

Decir que este NO rastrea rango de IP's sino que obtiene la lista oficial de los servidores de Movistar, para al menos tener los oficiales actualizaditos sin mucho rollo, ya luego usad el rastreador para buscar channels fuera de la lista oficial ;-)

Tambien esta en Python y su uso:

python imagenio.py numprovincia

Los numeros de provincia los da el propio script ;-)

Saludetes a todos :cool:

EDIT: He puesto otro enlace al codigo con cambios mejorados ;-)
 
#7
En el router comtrend no me sale la opción para desactivar IGMP

¿Alguien con este router sabe como hacerlo?
 
#8
Anonimo dijo:
En el router comtrend no me sale la opción para desactivar IGMP

¿Alguien con este router sabe como hacerlo?
Yo tengo el comtrend de fibra, el mismo trae un proxy, pilla la DNS del deco y añadela a las de tu equipo ;-) con esto a mi me funciona incluso con las ip DHCP que me entrega el router.

saludos :cool:
 
#9
Spacezed:

He hecho lo de añadir la dns pero sólo me extrae una lista m3u con #EXTM3U dentro.

No sé si lo habré hecho bien. Tengo windows 8 y en el adaptador de red en el protocolo tcp/ipv4 he añadido la DNS del deco y la he puesto la primera, me ha quedado así:

Servidor DNS preferido: La DNS del deco
Servidor DNS alternativo: La DNS del router (la primera de ellas)

He apagado y encendido el router pero nada.
 
#10
Creo que no tiene nada que ver lo de la DNS.

No me crea la lista si cambio en el script el intervalo. Si lo dejo como está si me crea la lista.
 
#11
Anonimo dijo:
Creo que no tiene nada que ver lo de la DNS.

No me crea la lista si cambio en el script el intervalo. Si lo dejo como está si me crea la lista.
usa los datos del deco para hacer funcionar el script al menos para saber si te anda bien, luego puedes pelear con el comtrend para no tener que usar la ip del deco.

Yo tengo el comtrend asi:

Advanced Setup/Lan/ Enable IGMP Snoopinng ACTIVADO y en Blocking Mode
Advanced Setup/IGMP Proxy/ Q:15 L:2 y en version Force V2

No he tocado mas nada salvo añadir la DNS del deco a mi ordenador.

Saludos
 
#12
Vale lo he hecho funcionar poniendo la IP del deco y al secript le he puesto un rango que he elegido.

El router lo tengo configurado como tú.

Por lo que veo cada vez que quiera hacer un rastreo tendré que poner la IP del deco o bien dejarla puesta para siempre aunque no sé como afecta para navegar por internet.

Gracias
 
#13
Anonimo dijo:
Vale lo he hecho funcionar poniendo la IP del deco y al secript le he puesto un rango que he elegido.

El router lo tengo configurado como tú.

Por lo que veo cada vez que quiera hacer un rastreo tendré que poner la IP del deco o bien dejarla puesta para siempre aunque no sé como afecta para navegar por internet.

Gracias
Capaz que cambie algo mas en el router, con lo que trastee con el :p

EDITO: Esto fue lo que hice: http://www.youtube.com/watch?v=vbxyegH1xPE ademas de colocar la IP del DNS del deco, con esto ya uso las IP de mi lan sin tener que poner las del deco :p
 
#14
Muchas gracias, spacezed. Funciona perfectamente.

Una sugerencia para que la consideres.
Escribir la info de un canal en una linea. Es decir:

#EXTINF:-1,Nova [935]rtp://@239.0.0.106:8208, etc

clasificar por el contenido entre corchetes.
dividir la línea/info por el corchete derecho, para tener la información en formato m3u.

De este modo tendriamos los canales clasificados, que supongo será mas útil.

Lo dicho. Buen trabajo.

Un saludo.
 
#15
spacezed dijo:
Anonimo dijo:
...
EDITO: Esto fue lo que hice: http://www.youtube.com/watch?v=vbxyegH1xPE ademas de colocar la IP del DNS del deco, con esto ya uso las IP de mi lan sin tener que poner las del deco :p
En el router la tabla de WAN SERVICES acaba en Remove. No tengo la columna de EDIT, con lo que no lo puedo hacer.

Una cosa, cuando se hace un rastreo de todas las IP comprueba para cada IP si la tienes contratada ¿no se puede "cambiar" ese valor? ;)
 
#16
Anonimo dijo:
spacezed dijo:
Anonimo dijo:
...
EDITO: Esto fue lo que hice: http://www.youtube.com/watch?v=vbxyegH1xPE ademas de colocar la IP del DNS del deco, con esto ya uso las IP de mi lan sin tener que poner las del deco :p
En el router la tabla de WAN SERVICES acaba en Remove. No tengo la columna de EDIT, con lo que no lo puedo hacer.

Una cosa, cuando se hace un rastreo de todas las IP comprueba para cada IP si la tienes contratada ¿no se puede "cambiar" ese valor? ;)
Realmente no comprueba si lo tienes contratado sino que comprueba si recibe algun dato, por lo que si recibe algo se supone que es un canal y lo agrega a la lista ;-)
 
#17
spacezed dijo:
Hola a todos aqui de nuevo para dejaros otro script, esta vez este se encarga de obtener la lista de canales con su ID original y NOMBRE desde los servidores multicast de Movistar dependiendo de vuestra localizacion :p

Es un poco tosco pero funciona, aqui os dejo el link:

Version Mejorada: http://pastebin.com/rmdx2x1b

Decir que este NO rastrea rango de IP's sino que obtiene la lista oficial de los servidores de Movistar, para al menos tener los oficiales actualizaditos sin mucho rollo, ya luego usad el rastreador para buscar channels fuera de la lista oficial ;-)

Tambien esta en Python y su uso:

python imagenio.py numprovincia

Los numeros de provincia los da el propio script ;-)

Saludetes a todos :cool:

EDIT: He puesto otro enlace al codigo con cambios mejorados ;-)
Hola Spacezed, gracias por el script. Lo he hecho funcionar cambiando previamente la ip y la dns del PC. Al cabo de 1h aprox. me da la IP del servidor Multicast Movistar y aparece "Obteniendo datos del servidor Multicast de Movistar TV". ¿Cuanto tiempo puede durar ese último proceso? Lo digo porque lo he dejado otra hora y no crea el fichero ni da ningún resultado en pantalla.

Por cierto para nuevos intentos he modificado el script en la sección:

###################################################
MCAST_GRP = '239.0.2.129'
###################################################

colocando la IP (menos 1) que me dio como encontrada para no tener que esperar tanto en ese proceso. ¿Es correcto no?

Gracias por tu trabajo.

Saludos.
 
#18
spacezed, a ver si me puedes echar una mano.

Ejecuto el script mejorado, y se me queda buscando el servidor multicast. Yo estoy en la region de madrid.

He retocado el codigo para que me imprima una traza cada vez qu ejecuta la lectura del socket, y tambien que me imprima el buffer, d.

De esta última información veo que la traza acaba con el domainName de la provincia 15, y tiene toda la pinta de que, al menos, la traza acaba "incorrectamentre", pues se lee <ServiceProvid cuando por similitud con entradas anteriores, al menos deberia ser del tipo <ServiceProvider
DomainName="DEM_4.imagenio.es" Version="32"> <Offering> <Push
Address="239.0.2.142" Port="3937"> </Push> </Offering></ServiceProvider>
.

De lo cual creo deducir que o el buffer se queda corto o la traza se queda corta.

El siguiente buffer que lee ya es de DEM_24. dado que no ha encontrado DEM_19, me hace pensar que el buffer se queda corto.

¿Como puedo ampliar el tamaño del buffer, si es que crees que el problema es ese?

El caso es que corri el programa hace un tiempo y me funcionó bien.

Gracias por anticipado.
 
#19
chemag dijo:
spacezed, a ver si me puedes echar una mano.

Ejecuto el script mejorado, y se me queda buscando el servidor multicast. Yo estoy en la region de madrid.

He retocado el codigo para que me imprima una traza cada vez qu ejecuta la lectura del socket, y tambien que me imprima el buffer, d.

De esta última información veo que la traza acaba con el domainName de la provincia 15, y tiene toda la pinta de que, al menos, la traza acaba "incorrectamentre", pues se lee <ServiceProvid cuando por similitud con entradas anteriores, al menos deberia ser del tipo <ServiceProvider
DomainName="DEM_4.imagenio.es" Version="32"> <Offering> <Push
Address="239.0.2.142" Port="3937"> </Push> </Offering></ServiceProvider>
.

De lo cual creo deducir que o el buffer se queda corto o la traza se queda corta.

El siguiente buffer que lee ya es de DEM_24. dado que no ha encontrado DEM_19, me hace pensar que el buffer se queda corto.

¿Como puedo ampliar el tamaño del buffer, si es que crees que el problema es ese?

El caso es que corri el programa hace un tiempo y me funcionó bien.

Gracias por anticipado.

Realmente el problema ahi no parece ser el buffer, sino que el XML se recibe como streaming, vamos que el mismo archivo lo recibe una y otra vez indefinidamente hasta cerrar el socket, lo ideal seria conectar al servidor multicast mediante Upnp para pedirle los xml.

Prueba tal vez cambiando el patron de la expresion regular para que solo busque la IP del dominio en cuestion y luego introduce el puerto a mano en el resto del codigo, puede ser que se salte el problema, a ver si tengo un ratillo y le doy un vistazo que ando algo liadillo, ya que ahora ;-)

Saludos
 
#20
spacezed dijo:
chemag dijo:
spacezed, a ver si me puedes echar una mano.

Ejecuto el script mejorado, y se me queda buscando el servidor multicast. Yo estoy en la region de madrid.

He retocado el codigo para que me imprima una traza cada vez qu ejecuta la lectura del socket, y tambien que me imprima el buffer, d.

De esta última información veo que la traza acaba con el domainName de la provincia 15, y tiene toda la pinta de que, al menos, la traza acaba "incorrectamentre", pues se lee <ServiceProvid cuando por similitud con entradas anteriores, al menos deberia ser del tipo <ServiceProvider
DomainName="DEM_4.imagenio.es" Version="32"> <Offering> <Push
Address="239.0.2.142" Port="3937"> </Push> </Offering></ServiceProvider>
.

De lo cual creo deducir que o el buffer se queda corto o la traza se queda corta.

El siguiente buffer que lee ya es de DEM_24. dado que no ha encontrado DEM_19, me hace pensar que el buffer se queda corto.

¿Como puedo ampliar el tamaño del buffer, si es que crees que el problema es ese?

El caso es que corri el programa hace un tiempo y me funcionó bien.

Gracias por anticipado.

Realmente el problema ahi no parece ser el buffer, sino que el XML se recibe como streaming, vamos que el mismo archivo lo recibe una y otra vez indefinidamente hasta cerrar el socket, lo ideal seria conectar al servidor multicast mediante Upnp para pedirle los xml.

Prueba tal vez cambiando el patron de la expresion regular para que solo busque la IP del dominio en cuestion y luego introduce el puerto a mano en el resto del codigo, puede ser que se salte el problema, a ver si tengo un ratillo y le doy un vistazo que ando algo liadillo, ya que ahora ;-)

Saludos
Después de seis horas buscando por google ejemplos de como leer el mensaje completo, pruebas y mas pruebas, y algunos cambios para recibir y concatenar bien los datos, pero que no sabría razonar porque debe ser así, logré juntar los dos trozos y recibir el mensaje completo.

La verdad es que parece un tente mientras te vendo, pero funcionó para la provincia de Madrid, que se recibía en dos partes. La primera parte, en mi caso, acaba justo en el 1 del 19, con lo cual no lo reconocía la regexp.

Una verdadera chapuza.

Respecto a la conexión Upnp, he visto referencia en multiples textos, como algo que facilita la vida, pero me reconozco virgen total al respecto.

Intentaré buscar alguina referencia por google.

Muchas grcias y un saludo.

PD: Una pregunta mas:

¿Sabes que significa el numero que aparece entre corchetes después del nombre del canal?.

¿De donde se podría sacar el número de canal que emplea Movistar?.

Y puestos ya, la pregunta del millón. ¿Como se podría consultar la programación, si es posible?
 
Arriba