Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo Winsock intercepta paquetes

Cómo Winsock intercepta paquetes

Intercepte paquetes IP que fluyen a través de la tarjeta de red local en forma de sockets sin formato.

Como programa de comunicación de red, Winsock también utiliza programación de sockets comunes para implementar la comunicación de red. Sin embargo, un programa de socket típico sólo puede responder a tramas de datos que coincidan con su propia dirección de hardware o que se envíen en forma de transmisiones. Para otras formas de tramas de datos, como las tramas de datos que llegaron a la interfaz de red pero no se enviaron a esa dirección, la interfaz de red no responderá después de verificar que la dirección de envío no es su propia dirección, lo que significa que la aplicación no puede recoger los datos que han llegado. El propósito de un rastreador de red es recibir todos los paquetes de datos que pasan a través de la tarjeta de red, ya sea a la tarjeta de red o a otros lugares. Obviamente, para lograr esto, la tarjeta de red ya no se puede ejecutar en el modo normal habitual, sino que se debe configurar en modo promiscuo. Específicamente para la implementación de programación, esta configuración de modo mixto de la tarjeta se implementa a través de un socket sin formato, que también es diferente de los sockets de flujo de datos y los sockets de datagramas de uso común. Después de crear el socket original, debe configurar las opciones de operación del encabezado IP a través de la función setsockopt() y luego vincular el socket original a la tarjeta de red local a través de la función bind(). Para que el socket sin formato acepte todos los datos, también debe configurarse mediante ioctlsocket(), y también puede especificar si desea manejar el encabezado IP usted mismo. En este punto, puede comenzar a rastrear paquetes de red, y la adquisición de paquetes aún se realiza a través de la función recv(), al igual que un socket de flujo o un socket de datagrama. Sin embargo, a diferencia de los otros dos sockets, el paquete de datos capturado por el socket original en este momento no es solo información de datos pura, sino que la información de datos más original, incluidos el encabezado IP, el encabezado TCP y otros encabezados de información, conserva su apariencia original cuando se transmite. a través de la red. Al analizar la información sin procesar transmitida en la capa inferior, se puede obtener cierta información sobre la red. Dado que estos datos se empaquetan a través de las capas de red y de transporte, los paquetes deben analizarse en función de los encabezados de trama adicionales. La estructura del paquete de datos se proporciona primero a continuación. Estructura general de un paquete: Paquete

Encabezado IP Encabezado TCP (u otro encabezado de información) Cuando los datos llegan a la capa de transporte desde la capa de aplicación, se agrega un encabezado de segmento TCP o un encabezado de segmento UDP. El encabezado del segmento de datos UDP es relativamente simple y consta de un encabezado de 8 bytes y una parte de datos. El formato es el siguiente:

16 bits 16 bits

Puerto de origen y puerto de destino

p>

UDP La longitud de la suma de verificación UDP y el encabezado de datos TCP es más compleja, comenzando desde 20 bytes fijos. Después del encabezado fijo hay una variable de longitud opcional, como se muestra a continuación.

16 bits 16 bits

Puerto origen Puerto destino

Número de secuencia

Número de acuse de recibo

Longitud del encabezado TCP (reservado) 7 bits URG ACK PSH RST SYN FIN tamaño de ventana

Puntero urgente de suma de comprobación

Opcional (0 o más palabras de 32 bits)

Opción (0 o más palabras de 32 bits)

Datos (opcional) En la implementación de programación, el análisis del encabezado del segmento de datos TCP se puede definir a través de la estructura de datos _TCP:

Ventana WORD /; / Tamaño de ventana