Cómo acceder a Internet mediante autenticación WEB en Linux
1. Utilice un navegador compatible con IE en Linux, ¿hay alguno? Alguien que sepa por favor dímelo.
2. ¿Hay algún éxito con el método Wine IE? Por favor compártelo con nosotros.
3. Si cambiamos estos sonidos de pájaros al mandarín, podremos utilizar navegadores que no sean IE, como Mozilla, para acceder a Internet mediante autenticación de red.
4. Exigir a los ISP que proporcionen páginas de verificación que admitan los estándares del W3C.
5. Analizar los principios de autenticación de red y escribir un programa de autenticación.
Método ideal cuatro, pero no puedo esperar y es posible que no pueda esperar. Quizás tengas más suerte que yo. Adopté el método tres. Con respecto al método tres, debe preguntar: no tengo derecho a modificar la página de autenticación en el servidor web y no funciona. De hecho, existe una solución alternativa: descargar la página de autenticación, modificarla de acuerdo con los estándares de JavaScript y guardarla localmente, y luego reemplazar la página de autenticación del servidor web con la página de autenticación web modificada localmente cada vez antes de conectarse. El método de modificación específico es encontrar el JavaScript de la página de autenticación utilizando el dialecto IE y realizar las modificaciones apropiadas en su página de autenticación de acuerdo con los métodos de modificación proporcionados en la tabla de comparación. Para las páginas de verificación que utilizan .cab, la situación es más complicada. Es necesario analizar el uso de .cab en el script JavaScript para determinar su funcionalidad, en mi caso su funcionalidad era obtener la IP local, así que simulé esta funcionalidad ejecutando el script localmente para obtener la IP. Parece que .cab está relacionado principalmente con IP.
Ejemplos
* Tome mi entorno de uso como ejemplo:
ISP: Tietong ADSL
Método de verificación de identidad:
Servidor de acceso del ISP: Huawei Quidway MA5200E/F (no se puede determinar completamente el modelo específico)
Linux: GENTOO 1.4 rc-3
Navegador: Mozilla 1.4a/ Phoenix 0.5
* En Linux, utilice mozilla (asegúrese de utilizar un navegador que no sea IE para obtener la página de verificación, que es un poco redundante, pero algunos usuarios están depurando en Windows$), cuando acceda a la WEB del ISP página de verificación, no se muestra nada en el navegador. Cuando se utiliza Mozilla para acceder a la página de autenticación WEB del ISP (asegúrese de utilizar un navegador que no sea IE para obtener la página de autenticación), no se muestra nada en el navegador y es imposible ingresar la cuenta y la contraseña, y mucho menos pasar la autenticación. . Esto no es difícil para nosotros, los usuarios de Linux. Al verificar el código fuente de la página de autenticación (/index.jsp), encontramos los siguientes dos fragmentos de javascript:
id="PortalClient"
.codebase= sed 's/^ *//' sed 's/ /:/g' cut -f3 -d:` amp
Descripción:
eth1 It; es el nombre de la tarjeta de red asociada con ADSL. Complételo de acuerdo con la situación real.
61.61.61.61 es la dirección de autenticación de mi ISP.
La siguiente sección es obtener la dirección IP de eth1.
¡Atención! Asegúrese de utilizar un navegador que no sea IE para obtener la página de autenticación de depuración, porque IE puede ejecutar el JavaScript de la página de autenticación y algunos procesos de autenticación en realidad se completan ejecutando varias páginas, y la última página en la que permanece IE no es necesariamente el comienzo de la página de autenticación, es posible que se pierda información importante de la página anterior, como fue mi caso.
Otro método
Si no está satisfecho con el método 3, puede utilizar el método 5 para continuar analizando los principios de la autenticación web y escribir su propio programa de autenticación. De hecho, después de aclarar el principio, la implementación de este método es más simple y flexible. Cuando el ISP requiere que el cliente envíe paquetes de mantenimiento con regularidad, este método solo se puede adoptar. Esto es lo que hice:
1. Usar software de análisis de red (como etéreo) para capturar paquetes durante el proceso de verificación normal;
En Windoze, usar etéreo para capturar paquetes. Tenga en cuenta que al capturar paquetes, no inicie ningún otro programa que genere comunicación de red excepto IE para evitar interferir en los datos y guardar estos paquetes de datos.
2. Analiza el contenido de los paquetes capturados;
Basta con echar un vistazo a los paquetes generados durante el proceso de autenticación web y entenderás por qué digo que este método es más sencillo. En pocas palabras, el método de autenticación web es en realidad el cliente que usa sed 's/^ *//' sed 's/ /:/g' cut -f3 -d:`
echo $MYIP
UN=8888888888
SERVIDOR=61.61.61.61
curl --trace trace.txt -A 'Mozilla' -d "nombre de usuario=$UNamp; contraseña= 8888amp; localip=$MYIPamp; connectname=amp; connecttype=-1" http://$SERVER/secu/ webLogin.jsp
Descripción: curl es un programa de línea de comandos que utiliza la sintaxis de URL para transferir archivos. http, ftp y otros protocolos similares a wget.
En el ejemplo anterior, el parámetro de línea de comando curl -A especifica el tipo de cliente que requiere el servidor por razones de seguridad. Prefiero Mozilla. -d es necesario cuando se utiliza el método POST. El contenido después de -d es el nombre de usuario, la contraseña, la dirección IP y otra información, que debe completarse como elementos de entrada de acuerdo con su página de autenticación. El contenido permanece sin cambios y los parámetros están separados por amp;. Después de eso está la dirección de la página de autenticación. Después de ejecutar este script, se devuelve 200 OK, lo que significa que la autenticación fue exitosa. De lo contrario, verifique cuidadosamente si los parámetros después de -d son normales y si la dirección es correcta.
*Programa de autenticación escrito en python:
#! /usr/bin/env python
importar httplib, urllib
params = urllib.urlencode({'connectname': '',
'connecttype': -1,
'consumeright': 0,
'separatecard': 0,
'localip': '192.168.000.000',
'IsIndex': 0,
'Nombre de usuario': 88888888,
'Contraseña': 8888})
headers = {'Aceptar': 'text/html';'User-Agent':'Mozilla';
'Content-Type':'application/x-www-form-urlencoded'}.
servidor = '61.61.61.61'
ruta = '/secu/webLogin.jsp'
conn = httplib.HTTPConnection(servidor)
conn.request("POST", ruta, parámetros, encabezados)
r1 = conn.getresponse()
imprimir r1.status, r1.reason
data1 = r1.read()
imprimir datos1
conn.close()
Programa para generar paquetes de datos keep-alive
#!
importar httplib
def testHttplib(servidor, ruta):
req = httplib.HTTP(servidor)
req.putrequest( 'GET ', ruta)
req.putheader('Aceptar', 'text/html')
req.putheader('User-Agent', 'Mozilla') p>
p>
req.endheaders()
ec, em, h = req.getreply()
fd = req.getfile()
return fd.read(), (ec, em)
myip = '192.168.000.000'
servidor = '61.61.61.61'
path = '/ ClientProcess.jsp?MsgType=1amp; ISNNO=1001amp; LocalIP=' myip
# print 'testing "ss"' (servidor, ruta)
dataHttplib, resultado = testHttplib(servidor, ruta)
# print "longitud de datos (httplib):", len(dataHttplib), resultado
# print dataHttplib
# print dataHttplib
Descripción.>Python es un potente lenguaje de programación, similar a Perl. Como puedes ver, hace el mismo trabajo que el rizo, pero de forma más elegante. Tenga cuidado de no omitir los campos "Agente de usuario" y "Tipo de contenido", perdí mucho tiempo en estos dos campos. El resto de instrucciones son las mismas que para el rizo.
Finalmente, agregue lo siguiente al crontab para garantizar que se envíe un paquete de mantenimiento de actividad al ISP cada 5 minutos para simular la ventana de tiempo.