miércoles, 5 de julio de 2017

PYTHON HEAD FIRST, FIRST STEPS SESSION 6

PRACTICA PARA SELECCIONAR DE UNA LISTA DE DATOS DEL COACH KELLY, LOS MEJORES TIEMPOS


Averiguar qué aplicación está usando un puerto de comunicaciones en Windows

A continuación explicaremos cómo saber qué apliación o servicio de Windows está usando un puerto determinado, para ello usaremos el comando Windowsnetstat. Para ello abriremos una ventana de MS-DOS (consola de comandos o shell), desde el botón "Inicio", escribimos "cmd", pulsamos con el botón derecho del ratón sobre "cmd.exe" y seleccionamos "Ejecutar como administrador":
Averiguar qué aplicación está usando un puerto de comunicaciones en Windows

Ejecutaremos el siguiente comando Windows:
netstat -naob
Nos devolverá un listado de todos los puertos de comunicaciones que están siendo usados actualmente con el protocolo (TCPUDP, TCPv6 y UDPv6), dirección IP local, dirección IP remota, estado y PID (número que identifica el proceso en las tareas que se están ejecutando):
Averiguar qué aplicación está usando un puerto de comunicaciones en Windows
Si queremos guardar el resultado en un fichero ejecutaremos el comando Windows:
netstat -naob > aplicaciones_puertos.txt
Averiguar qué aplicación está usando un puerto de comunicaciones en Windows
Con el comando comando Windows:
notepad aplicaciones_puertos.txt
Abriremos el Bloc de notas con el resultado del comando anterior, desde aquí podremos consultar, buscar y guardar todas las aplicaciones que abren puertos de comunicaciones en nuestro equipo:
Averiguar qué aplicación está usando un puerto de comunicaciones en Windows
Un ejemplo del resultado de este comando:
Conexiones activas
Proto Dirección local Dirección remota Estado PID
TCP 0.0.0.0:21 0.0.0.0:0 LISTENING 2068
ftpsvc
[svchost.exe]
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
No se puede obtener informaci¢n de propiedad
TCP 0.0.0.0:111 0.0.0.0:0 LISTENING 3848
[VeeamNFSSvc.exe]
TCP 127.0.0.1:63924 127.0.0.1:63925 ESTABLISHED 7216
[firefox.exe]
TCP 127.0.0.1:63925 127.0.0.1:63924 ESTABLISHED 7216
[firefox.exe]
TCP 127.0.0.1:63926 127.0.0.1:63927 ESTABLISHED 7216
[firefox.exe]
TCP 127.0.0.1:63927 127.0.0.1:63926 ESTABLISHED 7216
[firefox.exe]
TCP 127.0.0.1:64151 127.0.0.1:64152 ESTABLISHED 5436
[vmware-vmrc.exe]
TCP 127.0.0.1:64152 127.0.0.1:64151 ESTABLISHED 5436
[vmware-vmrc.exe]
En el caso en que no aparezca el ejecutable de la aplicación que está usando el puerto podremos consultarlo de la siguiente forma:
1. Ejecutaremos el comando anterior con el parámetro "o" que nos mostrará el PID del proceso que está abriendo el puerto, buscaremos el puerto del que queramos averiguar la aplicación o servicio que lo está usando. En en el ejemplo buscamos qué aplicación está usando el puerto "3306", anotaremos el PID de la aplicación que aparece al final de la línea (en el ejemplo "1320"):
Averiguar qué aplicación está usando un puerto de comunicaciones en Windows

COMO SABER QUE PUERTOS ESTAN OCUPADOS Y QUE PROGRAMA LOS UTILIZA EN WINDOWS

Como saber que puertos estan ocupados y quien los esta utilizando
De esas veces que necesitas saber si un puerto esta abierto y no estas en linux, sino en windows.. no tienes herramientas gráficas y solo puedes acceder a la consola y sus comandos..
Lo primero es utilizar netstat y unos cuantos parámetros desde la consola en windows (-o muestra el PID, -a todas las conexiones y -n direcciones ip)
c:\Jack> netstat -oan
Luego que ya sabemos si o no está en uso.. ahí mismo con el parámetro -o podemos tener acceso al no. de proceso o PID .. ya con ese dato podemos abrir el administrador de tareas, eso bastaría para saber su nombre y matarlo si es lo que necesitan.. pero si es un proceso global y no aparece en el administrador de tareas, no hay de otra más que seguir utilizando la consola para averiguar de donde diablos salío la aplicación que utiliza el puerto que necesitan.
Bueno, lo siguiente entonces es saber el nombre de la aplicación dueña del proceso y para esto utilizamos el comando tasklist con otro par de parámetros (-svc para obtener el nombre del servicio, -FI para aplicar un filtro de búsqueda)
c:\Jack> tasklist /svc /FI "PID eq 1428"
En este caso de ejemplo quiero conocer el nombre de la aplicación con PID 1428 que fue lo que encontré utilizando netstat .. y el resultado de la ejecución de tasklist es el nombre de la aplicación.
Ya para finalizar vamos a utilizar el comando taskkill enviando como parámetros -F para forzar el cierre de la aplicacion y -PID para especificar el número de proceso a matar.
c:\Jack> taskkill /F /PID 1428
Y taraaán.. Aprendieron a averiguar sí o no se estaba utilizando un puerto, el nombre de la aplicación que lo utilizaba y hasta lo matamos para que no nos siga molestando 😀
******************************************************************
que superamos el error de puerto
Ahora si vamos a trabajar con el codigo Python para crear el CGI
#! /usr/local/bin/python3

import glob

import athletemodel
import yate

data_files = glob.glob("data/*.txt")
athletes = athletemodel.put_to_store(data_files)

print(yate.start_response())
print(yate.include_header("Coach Kelly's List of Athletes"))
print(yate.start_form("generate_timing_data.py"))
print(yate.para("Select an athlete from the list to work with:"))
for each_athlete in athletes:
    print(yate.radio_button("which_athlete", athletes[each_athlete].name))
print(yate.end_form("Select"))
print(yate.include_footer({"Home": "/index.html"}))




*****************************************************************
#! /usr/local/bin/python3

import cgi

import cgitb
cgitb.enable()

import athletemodel
import yate

athletes = athletemodel.get_from_store()

form_data = cgi.FieldStorage()
athlete_name = form_data['which_athlete'].value

print(yate.start_response())
print(yate.include_header("Coach Kelly's Timing Data"))    
print(yate.header("Athlete: " + athlete_name + ", DOB: " +
                      athletes[athlete_name].dob + "."))
print(yate.para("The top times for this athlete are:"))
print(yate.u_list(athletes[athlete_name].top3))
print(yate.include_footer({"Home": "/index.html",
                           "Select another athlete": "generate_list.py"}))

*******************************************************




















No hay comentarios:

Publicar un comentario