Sei sulla pagina 1di 11

Programacin Ethernet

La mayora de las personas que navegan en Internet no utilizan PPP, sino que
usan Ethernet para todas sus necesidades. PPP tiene sus ventajas y desventajas
es. La mayor ventaja de PPP es que es barato. Todo lo que usted necesita es un
mdem y una lnea telefnica y ests en el negocio. El problema con PPP es que,
puesto que funciona a travs de lneas telefnicas normales con los mdems en
cada extremo, es extremadamente lento y poco fiable. No queremos dar a
entender que el protocolo PPP no es confiable, ms bien es la lneas telefnicas
que son lentos y poco confiables. Siempre habr una cierta prdida de paquetes
de usted con el servidor PPP. La mayor parte del tiempo, la Internet por s mismo
es muy fiable ya que la mayora de las lneas estn hechas de fibra. El eslabn
dbil de la cadena es el cable de telfono, que forma la conexin entre usted y su
proveedor de Internet.
Cuando un gran nmero de personas que quieran navegar por la red ", los
empleados de una gran empresa, por ejemplo, realmente no se puede utilizar PPP
para servir a todos. Puesto que usted no quiere tener todas las lneas en el edificio
atado por los mdems, la mayora de las organizaciones prefieren utilizar una
LAN para conectarse a s mismos a la Internet y para ayudar a organizar sus
negocios en el lateral. La manera ms popular para implementar una red de rea
grande es usar Ethernet.
En Ethernet slo hay un cable que pasa a travs del NIC (Network Interface
Cards) de todos los equipos de la LAN. No hay maestro ni esclavo, ningn
servidor ni cliente (en la capa de enlace de datos). Todas las mquinas tienen la
misma prioridad. Cada tarjeta en todas y cada equipo tiene su propio direccin
Ethernet de 48 bits que, como una direccin IP, es nico. Para enviar un paquete
TCP / IP a travs de una LAN Ethernet es la simplicidad misma. Todo lo que
tienes que hacer es colocar el paquete de 40 bytes de TCP / IP en el medio de la
trama Ethernet, como se muestra a continuacin.
1 2 3 4 5 6 1 2 3 4 5 6 1 2 -------- Datos --------- 1 2 3 4
| ----- Destn --------- | | ------- Fuente ------ | | Tipo | | --------TCP/IP-- -------------- |
| --- FCS ----- |
La direccin Ethernet de destino es la direccin del equipo que este paquete tiene
que alcanzar. La direccin Ethernet origen es la direccin de nuestro
ordenador. El tipo es 0x00 0x08 que significan los datos transportados se
encapsula IP. El FCS es la secuencia de verificacin de trama o de la suma de
comprobacin y se calcula por la tarjeta, no t. As que asumiendo que usted est
trabajando con Windows Sockets y tiene una conexin de acceso telefnico
(usando PPP), entonces el WinSock generar las cabeceras Ethernet pertinentes y
los paquetes TCP / IP siendo el mismo. Si PPP se est utilizando, el WinSock
crear encabezados PPP.
Ahora, con esta informacin, las mangas colectivos, vamos con la redaccin del
programa de Ethernet simple que pudimos encontrar. Pero en primer lugar, una
lista de verificacin de hardware y software. Debe tener un ordenador, una tarjeta
Ethernet y una red LAN Ethernet. Usted no tiene que estar en Internet.
En la programacin de Ethernet, usted no tiene que hablar directamente con el
NIC. Como la mayora de las tarjetas se diferencian entre s, necesitamos un poco
de software de controlador para ser cargados en la memoria para ofrecerle una
interfaz estndar.As, FTP Software Inc. sali con lo que se llama el Paquete de
Conductor Especificacin. El controlador de paquetes es simple un TSR, que se
carga a la memoria ya partir de ah, nos comunicamos con TSR que luego habla
con la tarjeta. La ventaja de este enfoque es que usted puede tener cualquier
tarjeta de cualquier empresa, con tal de que el TSR soporta dicha tarjeta. Este es,
sin duda mucho ms fcil que la lectura / escritura de los puertos de hardware.
Hemos utilizado NE1000 (el controlador de paquetes) en tanto 8 y tarjetas de 16
bits sin ningn problema. Otra cosa a tener en cuenta acerca de estos programas
es que slo funcionan bajo DOS. Dado que estamos tratando con TSR de aqu,
voy a suponer que usted sabe cmo escribir uno. La mayor captura de
controladores de paquetes interrumpe entre 60h y 80h. As que lo que hacemos es
el uso getvect () para descubrir a la ubicacin de la packetdriver en la memoria y
volver a comprobar, buscar la DRVR PKT cadena a intervalos de 3.
La razn por la que buscamos en intervalos de 3 se debe a que el primer cdigo
de la instruccin en el conductor es una instruccin jmp y despus de que lo
obtenemos de la firma del paquete controlador. Para encontrar la firma string,
utilizamos strncmp () y el registro para la cadena mencionada. Puesto que no
tenemos controlador de paquetes cargados en la actualidad, tenemos que escribir
la siguiente.
c: \> NE1000 0x60 3 0x300 {Intro}
Esto le dice a NE1000 para capturar INT 0x60, con la IRQ establecido en 3 y
0x300 como el puerto de hardware. Si usted tiene una tarjeta de 16 bits, ejecute
ne2000. Si esto no funciona, entonces usted tiene alguna tarjeta no estndar loco
en su caja.Pngase en contacto con su administrador de red.
Programa 1
# Include <stdio.h>
# Include <dos.h>
main ()
{
char * t = "PKT DRVR";
int ok = 1;
char * p;
carbn de lea sin firmar i = 0x60;
while ((ok) && (i <= 0x80))
{
p = (char *) getvect (i);
p = p 3;
si (strncmp (p, t, 8) == 0)
ok = 0;
ms
i + +;
}
if (ok)
printf ("No se encontr paquetes \ n");
ms
printf ("Packet Found ...% d \ n", i);
}
Este sencillo programa slo busca en su memoria de computadoras para el
controlador de paquetes y le informa si encuentra alguno.
En el nmero dos.
Programa 2
# Include <stdio.h>
# Include <dos.h>
unin Regs a, b;
struct SREGS s;
char * p;
main ()
{
ahah = 1;
ahal = 255;
int86x (0x60, & a, & b, & s);
printf ("La versin% d \ n", bxbx);
printf ("Controlador Clase% d \ n", bhch);
printf ("Escriba% d \ n", bxdx);
printf ("El nmero% d \ n", bhcl);
printf ("La funcionalidad bsica% d \ n", Bhal);
p = MK_FP (s.ds, bxsi);
printf ("Nombre% s \ n", p);
}
Estos controladores de paquetes pueden trabajar con muchas de las normas en
conflicto. Por ejemplo, el Internet DIX (Digital, Intel y Xerox), IEEE 802.3,
ARCnet, etc As que el software de FTP invent una etiqueta llamada clase
donde 1 significa DIX, 11 de IEEE 802.3 y as sucesivamente ..
Quemado en la tarjeta es un nmero nico que se llama el tipo. Estos nmeros de
tipo son entregados a usted por FTP y si la clase y el tipo son las mismas,
entonces una tercera etiqueta llaman el nmero va a ayudar a distinguir entre los
dos. Adems de esto, cada tarjeta tambin tiene un nmero de versin y un
nombre. Ahora que hemos escrito un programa muy pequeo, donde ponemos 1
en el registro AH y 255 en el registro AL y llamamos INT 60h. Los registros
sern ahora le dar la clase, tipo, nmero, nmero de versin y el nombre del
controlador de paquetes.
Uno de los registros (bhch) devolver la clase. El valor es 1, que significa que
nuestra tarjeta es compatible con el estndar DIX Ethernet, la forma ms comn
de Ethernet. Vamos a concentrarnos en DIX por esta misma razn. El tipo (bxdx)
es el nmero del fabricante dentro de la clase principal. FTP le ha dado a estos
nmeros, y si el tipo y la clase son los mismos, entonces usted tiene el nmero
(bhcl) que diferencia entre los dos. En nuestro caso si la clase y el tipo son
nicos.
En otras palabras, el tipo y la clase realmente no importan. El nmero de versin
(bxbx) no es realmente importante. Todo esto tiene ms que ver con el
controlador de paquetes de la tarjeta.
Luego, en los registros (s.ds, bxsi), tenemos el nombre del controlador de
paquetes, que en nuestro caso se trata de NE1000. El nombre depende de si est
utilizando una tarjeta de 8 bits o de 16 bits como se mencion antes.
Ahora bien, como ya hemos mencionado, cada tarjeta Ethernet tiene una
direccin Ethernet de 48 bits almacenado en el mismo. En estos 48 bits, los
primeros 24 bits se dan al fabricante Ethernet, quien decide qu hacer con los
ltimos 24 bits. Los primeros 24 bits se denominan Organizacional identificador
nico. Si usted realmente quiere entrar en detalles, usted puede sacar de los dos
primeros, que son lleno de significado. Lo que tienes que entender es que cada
tarjeta Ethernet que usted compra tiene una direccin Ethernet codificado de
forma rgida en ella. Debido a que 2 elevado a 48 es un nmero muy grande, a
partir de hoy hay haber escasez de direcciones Ethernet, muy diferente de las
direcciones IP que nos estamos quedando rpidamente sin.
Programa 3
# Include <stdio.h>
# Include <dos.h>
unin Regs a, b;
struct SREGS s;
char * p;
aa unsigned char [6];
main ()
{
ahah = 6;
axcx = 6;
axdi = FP_OFF (aa);
s.es = FP_SEG (aa);
int86x (0x60, & a, & b, & s);
printf ("Direccin Ethernet% d \ n", bxcx);
printf ("% x: x%:% x:% x: x%:% x \ n", aa [0] aa [1], aa [2], aa [3], aa
[4], aa [5]);
}
Este programa muestra la direccin Ethernet.
Ahora la pregunta es que requerimos del controlador de paquetes, y no la tarjeta,
un mango, un identificador es un nmero. Si desea enviar y recibir datos, se
necesita un mango para que el controlador de paquetes sabe que est pidiendo la
informacin y donde tiene la informacin ha venido. Esto se debe a que el
controlador de paquetes puede recibir varios paquetes, que a su vez va a hablar
con la tarjeta
En un paquete de Ethernet, los primeros 12 bytes son la direccin Ethernet de
destino y de origen. Los dos siguientes son lo que llamamos el accessType o el
protocolo. Todos los paquetes IP tendrn la 0x08 0x00 protocolo. ARP paquetes
tendrn el tipo ajustado a 0x06 0x08. As que cuando estamos hablando con el
conductor del paquete, tenemos que decirle que estamos interesados en este tipo
especfico de paquetes.
La longitud del tipo debe ser 0 y no 2, la causa est solicitando los todos los
paquetes. Deben tener la funcin de devolucin de llamada o la funcin que se
llamar. Una vez que los valores se colocan en los registros pertinentes y de
interrupcin de la generada, el registro BX llevar a cabo el nmero que se llama
el mango.
Ahora, todo lo que tenemos que hacer es enviar los paquetes. Para ello, tendr 2
mquinas, Ejecute el programa idntico en ambos, se enva el paquete con un
cierto tipo de paquetes dicen 0x01 0x01, el otro equipo recibir el paquete como
usted lo enva.
Tenga en cuenta que 60 bytes es el tamao mnimo porque todo el paquete
Ethernet debe ser 64 bytes mnimo, los 4 bytes al final son la suma de
comprobacin. Si desea escribir un analizador de paquetes, lo nico que tiene que
hacer es hacer que el typelen 0 y su tarjeta ahora recoger todos y cada paquete
que pasa en el cable. Puede mostrar y ver lo que todo el mundo est haciendo en
la red Ethernet.
Programa 4
# Include <dos.h>
# Include <stdio.h>
FILE * fp;
void abc (sin firmar caracteres p)
{
fprintf (fp, "..% .. x% d ..% c \ n", p, p, p);
}
unin Regs a, b;
struct SREGS s;
sin firma ad char [6];
unsigned char c [2];
int handle, i, y, ii;
unsigned carbn d [60], e [600];
zzz interrupcin void (pb, di, si, ds, es, dx, cx, bx, hacha, ip, sc,
banderas)
pb corto sin signo, di, SI, ds, es, dx, cx, bx, ax, IP, cs, banderas;
{
printf ("Receptor ax =% d Tamao de paquete% d \ n", hacha, cx);
if (ax == 0)
{
ES = FP_SEG (e);
di = FP_OFF (e);
ii = cx;
}
if (ax == 1)
{
for (i = 0; i <= ii; i + +)
abc (e [i]);
}
}
main ()
{
fp = fopen ("c: \ \ z.txt", "a +");
segread (& s);
ahah = 1;
ahal = 255;
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Conductor Info% d \ n", bxcflag);
printf ("La clase% d Escriba% d \ n", bhch, bxdx);

ahah = 6;
axcx = 6;
s.es = FP_SEG (ad);
axdi = FP_OFF (ad);
int86x (0x60, & a, & b, & s);
printf ("Carry Flag direccin Ethernet% d \ n", bxcflag);
printf ("Direccin Ethernet% x: x%:% x: x%:% x:% x \ n", ad [0], ad [1],
anuncio [2], anuncio [3], ad [4] , ad [5]);
ahal = 1;
axbx = 0xff;
AHDL = 0;
axcx = 0;
ahah = 2;
s.es = FP_SEG (zzz);
axdi = FP_OFF (zzz);
c [0] = 0xff; c [1] = 0xff;
s.ds = FP_SEG (c);
axsi = FP_OFF (c);
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Acceso Escriba% d \ n", bxcflag);
printf ("Handle% d \ n", bxax);
handle = bxax;
ahah = 21;
AxBx = mango;
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Obtenga Modo Para descargar% d \ n", bxcflag);
printf ("Modo Para descargar% d \ n", bxax);
ahah = 20;
AxBx = mango;
axcx = 6;
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Set Para descargar el modo% d \ n", bxcflag);
getch ();
getch ();
ahah = 3;
AxBx = mango;
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Tipo de lanzamiento:% d \ n", bxcflag);
printf ("All Over \ n");
fclose (fp);
}
Un Ethernet es slo una conexin de cable simple, una forma de comunicarse y
transferir informacin a travs de distancias cortas. En Ethernet, no hay maestro
ni esclavo; no hay un ordenador es ms importante que la otra. Incluso el
servidor de archivos tiene la misma prioridad que la estacin de trabajo sin disco
ms humilde en la red.
Cuando se enva un paquete a travs de la red, ser viajar de un extremo del
alambre al otro extremo y cada NIC en el camino va a recoger el paquete para
comprobar que es la direccin de destino. Si la direccin en el paquete coincide
con la direccin en la NIC, a continuacin, se har una copia del paquete y
enviarlo a la siguiente NIX en la lnea. Si la direccin de destino en un paquete es
0xff 0xff 0xff 0xff 0xff 0xff, lo que significa que es un mensaje de difusin,
entonces cada NIC en la red recogerlo y proceso.
LAN Ethernet tambin se denominan redes CSMA / CD. El CS es sinnimo de
deteccin de portadora que significa que las tarjetas se comprobar si la
informacin ya est circulando en el cable antes de intentar enviar los datos a
travs de ella. Si est ocupada la lnea, van a esperar a que una ruptura en la
comunicacin antes de tomar a travs del cable. MA es de acceso mltiple, lo que
significa que muchas tarjetas y los ordenadores pueden ser conectados a un cable
en el mismo tiempo. CD es sinnimo de deteccin de colisiones. Si dos tarjetas
Ethernet intentan utilizar el cable al mismo tiempo, entonces sus paquetes de
datos 'chocar' y confundir a las cartas. As que cuando dos cartas descubren que
estn interfiriendo entre s, ambos marcha atrs y esperar durante un intervalo de
tiempo aleatorio. La tarjeta que esper menos tiempo comienza a enviar primero
y por lo general no hay choque este momento. Para reducir las colisiones, el
cable debe tener una longitud manejable y el tamao del paquete debe ser
pequea y fija. En nuestro caso es 60, ms 4 bytes de la suma de comprobacin
de lo que equivale a un total de 64 bytes. La suma de comprobacin se agrega
por la tarjeta y no por nosotros o por el controlador de paquetes y esto hace que
la operacin extremadamente rpido.
Un paquete Ethernet 'Sniffer'
He aqu un programa sniffer completa junto con un proceso sistemtico,
explicacin paso a paso de cmo exactamente funciona todo. En realidad no es
tan difcil.
sniffer.c
# Include <dos.h>
# Include <stdio.h>
FILE * fp;
void abc (sin firmar caracteres p) {
fprintf (fp, "..% .. x% d ..% c \ n", p, p, p);
}
unin Regs a, b;
struct SREGS s;
sin firma ad char [6];
unsigned char c [2];
int handle, i, y, ii;
unsigned carbn d [60], e [600];

zzz interrupcin void (pb, di, si, ds, es, dx, cx, bx, hacha, ip, sc,
banderas)
pb corto sin signo, di, SI, ds, es, dx, cx, bx, ax, IP, cs, banderas;
{
printf ("Receptor ax =% d Tamao de paquete% d \ n", hacha, cx);
if (ax == 0) {
ES = FP_SEG (e);
di = FP_OFF (e);
ii = cx;
}
if (ax == 1) {
for (i = 0; i <= ii; i + +)
abc (e [i]);
}
}

main () {
fp = fopen ("c: \ \ z.txt", "a +");
segread (& s);
ahah = 1;
ahal = 255;
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Conductor Info% d \ n", bxcflag);
printf ("La clase% d Escriba% d \ n", bhch, bxdx);
ahah = 6;
axcx = 6;
s.es = FP_SEG (ad);
axdi = FP_OFF (ad);
int86x (0x60, & a, & b, & s);
printf ("Carry Flag direccin Ethernet% d \ n", bxcflag);
printf ("direccin Ethernet es% x: x%:% x: x%:% x:% x \ n", ad [0], ad
[1], anuncio [2], anuncio [3], ad [4 ], ad [5]);
ahal = 1;
axbx = -1;
AHDL = 0;
axcx = 0;
ahah = 2;
s.es = FP_SEG (zzz);
axdi = FP_OFF (zzz);
c [0] = 0xff;
C [1] = 0xff;
s.ds = FP_SEG (c);
axsi = FP_OFF (c);
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Acceso Escriba% d \ n", bxcflag);
printf ("Handle% d \ n", bxax);
handle = bxax;
ahah = 21;
AxBx = mango;
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Obtenga Modo Para descargar% d \ n", bxcflag);
printf ("Modo Para descargar% d \ n", bxax);
ahah = 20;
AxBx = mango;
axcx = 6;
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Set Para descargar el modo% d \ n", bxcflag);
getch ();
getch ();
ahah = 3;
AxBx = mango;
int86x (0x60, & a, & b, & s);
printf ("Carry Flag Tipo de lanzamiento:% d \ n", bxcflag);
printf ("All Over \ n");
fclose (fp);
}
Este es el programa sniffer que estbamos discutiendo. Como un buen fisgn,
que escucha a escondidas a todas las transferencias de datos en la red LAN,
incluso si no estn destinados para usted.
La primera parte del programa debe ser muy familiar para usted por
ahora. Estamos mostrando primero un poco de informacin para el conductor, y
entonces estamos imprimiendo la direccin Ethernet de la tarjeta el que estamos
trabajando. La nica razn por la que hemos aadido todas esas cosas viejas es
porque de lo contrario el programa parece demasiado pequeo!
Es slo ahora que llegamos a los bits realmente jugosos. Pusimos un montn de
valores sin sentido en diferentes registros y luego rellenamos la direccin de la
funcin de interrupcin zzz () en los registros ES: DI. Esta funcin es nuestro
ejemplo de devolucin de llamada siempre que la tarjeta Ethernet tiene ningn
dato para nosotros, el controlador de paquetes llamar al zzz () funcin. Ahora,
debido a zzz () es una funcin de interrupcin, se pas todos los valores en los
registros como parmetros. A continuacin, puede leer las interpretar los valores
y actuar sobre ellos. Saltar por encima de la zzz () y comprobar que funciona.
Como usted puede ver, cuando zzz () es llamada, comprueba el estado del
registro AX. Si AX es igual a 0, entonces eso significa que el controlador de
paquetes tiene informacin para transmitir. Nuestra funcin coloca
obedientemente la direccin de una matriz e en el Registro de pares ES: DI y
copia el valor almacenado en CX en una variable. CX celebr el nmero exacto
de bytes a punto de ser enviado a nosotros.
El zzz () la funcin se llama una vez ms y esta vez el valor de AX es 1. Esto
significa que su visto bueno para nuestra funcin para acceder a los bytes ahora
almacenados en la matriz e. De esta manera el conductor del paquete pasa
informacin entre nosotros y la tarjeta Ethernet. El abc de funcin () se utiliza
para escribir los datos entrantes en el disco.
Antes que llamamos la interrupcin y pusimos todo esto, sin embargo, tenemos
que pasar primero el controlador de paquetes el valor del filtro. Por abarrotar el
valor 0xff 0xff en la matriz c, le decimos a la tarjeta Ethernet para darnos todo lo
que los bytes que recibe. La direccin de la matriz se coloca en el par de registro
DS: SI.
La interrupcin se llama ahora.
Despus de llamar a la interrupcin, comprobamos el valor en el indicador de
acarreo. Si es uno, entonces se produce un error y se supone que debemos
comprobar AH para el valor de error. Si es cero, entonces todo est bien.
Tambin imprimimos el valor del mango almacenado en AX, justo antes de
almacenarlo en la variable de mango . Entonces llamando a la funcin no slo
zzz asignado () como la funcin de devolucin de llamada, tambin nos dieron a
nosotros mismos un mango.
Mediante la colocacin de 21 en el registro AH y el mango en el registro BX,
podemos comprobar en nuestro modo por defecto, que se muestra a continuacin
reciben.
El modo de recepcin especifica cuyos paquetes que recibiremos. Por defecto,
slo se supone que tenemos que conseguir nuestros paquetes. Mediante la
colocacin de 20 en el registro AH y el mango en el BX registrarse y
estableciendo el registro CX en el modo deseado, podemos cambiar el modo de
recepcin. Vamos a cambiar nuestro modo de 6, lo que significa que queremos
ver todos los paquetes, independientemente de su direccin de destino. "Modo
Bsqueda", en otras palabras.
Los dos getch () 's despus de la ejecucin del programa de interrupcin llamada
de interrupcin hasta que alguien hace clic en un tecla dos veces.
Una vez que el control pasa los dos getch () 's, llamamos a otro servicio de la
interrupcin 0x60 y cerramos el mango. Esto es un poco como hacer un fclose ()
y es una buena forma y limpio para limpiar despus del programa.

Potrebbero piacerti anche