Python - SCRIPT PARA HACER PING A UNA LISTA DE IP's.

 
Vista:
sin imagen de perfil
Val: 54
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

SCRIPT PARA HACER PING A UNA LISTA DE IP's.

Publicado por Carl0701 (19 intervenciones) el 24/02/2017 08:23:59
Hola foreros:

Necesito hacer ping de forma periodica a una lista de ip´s incluida en un fichero de texto y actualizar una tabla sql de forma consecuente con el resultado. Tambien me genera un log con las ip's erroneas.
Para ello, utilizo el siguiente codigo:

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
import MySQLdb
import subprocess
import os
import logging
import datetime
 
'''
ip_file.lst contains ip address in following format
192.168.1.1
192.168.1.2
'''
 
#Enable debug logging into log
DEBUG=True
 
if(DEBUG):
    logging.basicConfig(format='%(asctime)s %(message)s',filename='/var/www/html/ipScanFlist.log', level=logging.DEBUG)
 
def debug(message):
    logging.debug(message)
 
host = "localhost"
user = "nameuser"
passw = "password"
base = "database"
 
db = MySQLdb.connect(host,user,passw,base)
cur = db.cursor()
 
with open('ip_file.lst','r') as file:
    for ip in file:
        result=subprocess.Popen(["ping", "-c", "1", "-n", "-W", "2", ip],
		stdout=file, stderr=file).wait()
        if result:
                	print ip, "inactive"
			debug(ip)
			cur.execute("UPDATE devices SET devAuth=0 WHERE devIp='%s'" %(ip))
        else:
                	print ip, "active"
			cur.execute("UPDATE devices SET devAuth=1 WHERE devIp='%s'" %(ip))
db.close()

El fichero ip_file.lst con la relación de ip´s a chequear tiene el siguiente formato

1
2
3
4
5
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5

El script chequea la lista de ip´s satisfactoriamente pero la tabla no se actualiza, siendo los datos de configuración son los correctos.

¿Alguna idea...?
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: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

SCRIPT PARA HACER PING A UNA LISTA DE IP's.

Publicado por xve (1646 intervenciones) el 24/02/2017 21:03:16
Hola, creo que te falta la instrucción:
1
cur.commit()
después del execute!!!
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
sin imagen de perfil
Val: 54
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

SCRIPT PARA HACER PING A UNA LISTA DE IP's.

Publicado por CARLOS (19 intervenciones) el 25/02/2017 20:03:42
Gracias xve por tu respuesta. Utilizando tu sugerencia el script me da error. He probado con
1
db.commit()
y se ejecuta pero sigue sin actualizar la tabla.

Sin embargo, si utilizo este otro script que rastrea un rango completo de ip's, funciona prefectamente:

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
import MySQLdb
import subprocess
import os
import logging
import datetime
 
#Enable debug logging into log
DEBUG=True
 
if(DEBUG):
    logging.basicConfig(format='%(asctime)s %(message)s',filename='/var/www/html/ipScanRange.log', level=logging.DEBUG)
 
def debug(message):
    logging.debug(message)
 
host = "localhost"
user = "username"
passw = "password"
base = "database"
 
db = MySQLdb.connect(host,user,passw,base)
cur = db.cursor()
 
with open(os.devnull, "wb") as file:
        for n in xrange(1, 24):
                ip="192.168.1.{0}".format(n)
                result=subprocess.Popen(["ping", "-c", "1", "-n", "-W", "2", ip],
                        stdout=file, stderr=file).wait()
                if result:
                        print ip, "inactive"
			debug(ip)
			cur.execute("UPDATE devices SET devAuth=0 WHERE devIp='%s'" %(ip))
                else:
                        print ip, "active"
			cur.execute("UPDATE devices SET devAuth=1 WHERE devIp='%s'" %(ip))
db.close()

Mi problema es que necesito interrogar ip's diversas.
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: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

SCRIPT PARA HACER PING A UNA LISTA DE IP's.

Publicado por xve (1646 intervenciones) el 26/02/2017 20:21:04
No se ver la diferencia entre uno y otro... no entiendo porque uno si funciona y el otro no!!!

Entiendo que la conexión a la base de datos es igual en los dos...
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
sin imagen de perfil
Val: 54
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

SCRIPT PARA HACER PING A UNA LISTA DE IP's.

Publicado por CARLOS (19 intervenciones) el 28/02/2017 07:11:34
Desde luego, la conexión a la base de datos es idéntica...
Yo creo que necesito delimitar de alguna forma las ip's incluidas en el fichero de texto, pero no se como hacerlo...
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