Autor Tema: W5500 servidor por ethernet  (Leído 1429 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2802
Re:W5500 servidor por ethernet
« Respuesta #30 en: 03 de Julio de 2020, 04:32:06 »
La función del cliente DHCP se queda siempre en RUN:

Código: [Seleccionar]
/**Ejecuta el cliente DHCP en el bucle principal*/
void Cliente_DHCP(void)
{
    uint8_t ValorDHCP = DHCP_run();

    BorrarVariablePrueba = ValorDHCP;

    switch (ValorDHCP)
    {
        case DHCP_IP_ASSIGN:
        {
            FlagEjecucionTareasEthernet = false;
        }
            break;
        case DHCP_IP_CHANGED:
        {
            FlagEjecucionTareasEthernet = false;
        }
            break;
        case DHCP_IP_LEASED:
        {
            AppDatos.Memoria.DireccionIP.Valor[0]=netInfo.ip[0];
            AppDatos.Memoria.DireccionIP.Valor[1]=netInfo.ip[1];
            AppDatos.Memoria.DireccionIP.Valor[2]=netInfo.ip[2];
            AppDatos.Memoria.DireccionIP.Valor[3]=netInfo.ip[3];

            ServidorModbus_FlagGuardarMemoria = true;

            FlagEjecucionTareasEthernet = true;
            EthernetDatos.EstadoProximo = ETHERNET_ESTADO_FUNCIONAMIENTO_NORMAL;
        }
            break;
        case DHCP_FAILED:
        {
            FlagEjecucionTareasEthernet = false;
        }
            break;
        default:
            FlagEjecucionTareasEthernet = false;
            break;
    }
}

Siempre se va a default con un valor de 1 que corresponde con DCHP_RUNING

Código: [Seleccionar]
enum
{
   DHCP_FAILED = 0,  ///< Processing Fail
   DHCP_RUNNING,     ///< Processing DHCP protocol
   DHCP_IP_ASSIGN,   ///< First Occupy IP from DHPC server      (if cbfunc == null, act as default default_ip_assign)
   DHCP_IP_CHANGED,  ///< Change IP address by new ip from DHCP (if cbfunc == null, act as default default_ip_update)
   DHCP_IP_LEASED,   ///< Stand by
   DHCP_STOPPED      ///< Stop processing DHCP protocol
};

Si lo ejecuto en mi router sin embargo, me llega a DHCP_IP_LEASED y en esta ocasión le da 192.168.1.100

Voy a colocar paso por paso mi configuración a ver si el fallo puede venir por ahi.

Primero el sistema llama:

Código: [Seleccionar]
                //Dirección MAC
                netInfo.mac[0] = AppDatos.Memoria.DireccionMac.Valor[0];
                netInfo.mac[1] = AppDatos.Memoria.DireccionMac.Valor[1];
                netInfo.mac[2] = AppDatos.Memoria.DireccionMac.Valor[2];
                netInfo.mac[3] = AppDatos.Memoria.DireccionMac.Valor[3];
                netInfo.mac[4] = AppDatos.Memoria.DireccionMac.Valor[4];
                netInfo.mac[5] = AppDatos.Memoria.DireccionMac.Valor[5];

                netInfo.ip[0] = 192;
                netInfo.ip[1] = 168;
                netInfo.ip[2] = 0;
                netInfo.ip[3] = 214;

                //Mascara de Subnet
                netInfo.sn[0] = 255;
                netInfo.sn[1] = 255;
                netInfo.sn[2] = 255;
                netInfo.sn[3] = 0;

                //Dirección gateway
                netInfo.gw[0] = 192;
                netInfo.gw[1] = 168;
                netInfo.gw[2] = 0;
                netInfo.gw[3] = 1;

                netInfo.dns[0] = 192;
                netInfo.dns[1] = 168;
                netInfo.dns[2] = 0;
                netInfo.dns[3] = 1;

                if(AppDatos.Memoria.TipoIP == IP_AUTOMATICA)
                {
                    netInfo.dhcp = NETINFO_DHCP;
                }
                else
                {
                    netInfo.dhcp = NETINFO_STATIC;
                }

                Inicializacion_W5500();

siendo:

Código: [Seleccionar]
void Inicializacion_W5500(void)
{
    uint8_t temp;
    uint8_t W5500FifoSize[2][8] = {{2, 2, 2, 2, 2, 2, 2, 2, }, {2, 2, 2, 2, 2, 2, 2, 2}};

    reg_wizchip_cs_cbfunc(cs_sel, cs_desel);                        //Indicamos las funciones CS utilizar por el W5500
    reg_wizchip_spi_cbfunc(SPI_Recibir, SPI_Escribir);              //Indicamos las funciones SPI utilizar por el W5500

    if(ctlwizchip(CW_INIT_WIZCHIP, (void*)W5500FifoSize) == -1)
    {
        ERROR(ERROR_ETHERNET);
        while(1);
    }

    do
    {
        if (ctlwizchip(CW_GET_PHYLINK, (void*)&temp) == -1)
        {

        }
    } while (temp == PHY_LINK_OFF);


    wizchip_setnetinfo(&netInfo);                       //Tomamos la información
    wizchip_getnetinfo(&netInfo);
}

Acto seguido se hace lo siguiente:

Código: [Seleccionar]
            if(AppDatos.Memoria.TipoIP == IP_AUTOMATICA)
            {
                EthernetDatos.EstadoProximo = ETHERNET_ESTADO_IP_AUTOMATICA;

                setSHAR(netInfo.mac);
                DHCP_init(0, DHCP_Buffer);
                reg_dhcp_cbfunc(AsignarIP, AsignarIP, ConflictoIP);

            }
            else
            {
                EthernetDatos.EstadoProximo = ETHERNET_ESTADO_IP_MANUAL;

                setSHAR(netInfo.mac);
            }

estamos siempre en automatica, colocamos los punteros a las funciones para que trabaje el DHCP y un buffer de 2048.

Código: [Seleccionar]
/**Función para asignar una IP*/
void AsignarIP(void)
{
   getIPfromDHCP(netInfo.ip);
   getGWfromDHCP(netInfo.gw);
   getSNfromDHCP(netInfo.sn);
   getDNSfromDHCP(netInfo.dns);
   netInfo.dhcp = NETINFO_DHCP;

   // Inicializacion de la red
    Inicializacion_RED();
}

/**Ocurre si hay un conflicto de IP*/
void ConflictoIP(void)
{
   while(1);                //Paramos
}

en "Asignar IP" es donde se pisa la configuración inicial una vez nos la da el router.

void Inicializacion_RED(void)
{
    wiz_NetInfo netinfo1;
    //Establecer información de red desde la estructura netinfo
    ctlnetwork(CN_SET_NETINFO, (void*)&netInfo);

    //Obtener información de la red
    ctlnetwork(CN_GET_NETINFO, (void*)&netinfo1);
}[/code]

y ya se ejecuta el " Cliente_DHCP();" que es donde se queda siempre en running.

un saludo
« Última modificación: 03 de Julio de 2020, 04:43:42 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2271
Re:W5500 servidor por ethernet
« Respuesta #31 en: 03 de Julio de 2020, 05:49:18 »
¿Qué estás usando para obtener la info vía ipconfig? ¿Un ordenador de la empresa? ¿Un portátil tuyo? ...

No veo información del Servidor DHCP cuando usas la red de la empresa, que sí aparece cuando usas tu router (192.168.1.1).
Tener NETBIOS sobre TCP/IP habilitado podría causar un grave problema de seguridad.

En caso de tener un portátil... ¿si lo conectas al router o un switch vía ethernet te toma bien los parámetros de la red?

seguimos...

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2802
Re:W5500 servidor por ethernet
« Respuesta #32 en: 03 de Julio de 2020, 06:03:32 »
Hola xocas, gracias por responder.

Acabo de encontrar la solución a la mitad del problema. Al pasar el software a limpio me salte una función por que parece que soy medio gili*ollas. no había configurado el timer del DHCP, he añadido en el bucle principal esto:

Código: [Seleccionar]
    if(ServidorEthernet_ContadorTemporizacionDHCP >= 1000)
    {
        DHCP_time_handler();
    }

que se ejecuta a cada segundo y ya funciona perfectamente en la red de la oficina, no se por que narices funcionaba en mi router, pero no debería haber funcionado tampoco.

Ahora me queda solucionar el tema de la IP estatica, en este ambito estoy un poco mas perdido y vuelvo a tener el mismo problema, en mi router va y en el de la oficina no.
Aunque este me extraña menos que no funcione por que no tengo algo que me establezca la comunicación como hace el cliente DHCP.

cuando lo pongo en IP statica, lo que ejecuto es esta función.

/**Ejecuta el cliente para una IP Fija en el bucle principal*/
void Cliente_IPFija(void)
{
    uint8_t bufSize[] = {2, 2, 2, 2};

    wizchip_init(bufSize, bufSize);

    //Se pone la IP que ha introducido el usuario por pantalla
    netInfo.ip[0] = AppDatos.Memoria.DireccionIP.Valor[0];
    netInfo.ip[1] = AppDatos.Memoria.DireccionIP.Valor[1];
    netInfo.ip[2] = AppDatos.Memoria.DireccionIP.Valor[2];
    netInfo.ip[3] = AppDatos.Memoria.DireccionIP.Valor[3];

    wizchip_setnetinfo(&netInfo);
    wizchip_getnetinfo(&netInfo);

    ServidorModbus_FlagGuardarMemoria = true;

    FlagEjecucionTareasEthernet = true;
    EthernetDatos.EstadoProximo = ETHERNET_ESTADO_FUNCIONAMIENTO_NORMAL;
}

supongo que aquí debería colocar la configuración adecuada de la red, pero si es asi por que en mi router funciona?

por cierto:

Citar
No veo información del Servidor DHCP cuando usas la red de la empresa, que sí aparece cuando usas tu router (192.168.1.1).
Tener NETBIOS sobre TCP/IP habilitado podría causar un grave problema de seguridad.

algo que deba cambiar para mejorar mi seguridad?
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2271
Re:W5500 servidor por ethernet
« Respuesta #33 en: 03 de Julio de 2020, 06:17:13 »
Tengo que volver a preguntar...

¿Qué estás usando para obtener la info vía ipconfig? ¿Un ordenador de la empresa? ¿Un portátil tuyo? ...

En caso de tener un portátil... ¿si lo conectas al router o un switch vía ethernet te toma bien los parámetros de la red?

Hay que ir descartando cosas, si con tu router funciona y con el de la empresa no el problema quizá no sea del dispositivo sinó de alguna configuración en el router de la empresa.

saludo

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2802
Re:W5500 servidor por ethernet
« Respuesta #34 en: 03 de Julio de 2020, 06:19:33 »
Si conecto mi portatil directo por ethernet puedo entrar en internet sin problemas, al hacer ipconfig /all me sale lo siguiente:

Código: [Seleccionar]
Configuración IP de Windows

   Nombre de host. . . . . . . . . : DESKTOP-JPM5FFI
   Sufijo DNS principal  . . . . . :
   Tipo de nodo. . . . . . . . . . : híbrido
   Enrutamiento IP habilitado. . . : no
   Proxy WINS habilitado . . . . . : no
   Lista de búsqueda de sufijos DNS: home

Adaptador de Ethernet Ethernet:

   Sufijo DNS específico para la conexión. . : home
   Descripción . . . . . . . . . . . . . . . : Killer E2400 Gigabit Ethernet Controller
   Dirección física. . . . . . . . . . . . . : D4-81-D7-77-DF-ED
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí
   Vínculo: dirección IPv6 local. . . : fe80::586:882d:61a9:1cad%8(Preferido)
   Dirección IPv4. . . . . . . . . . . . . . : 192.168.0.199(Preferido)
   Máscara de subred . . . . . . . . . . . . : 255.255.255.0
   Concesión obtenida. . . . . . . . . . . . : viernes, 3 de julio de 2020 11:18:12
   La concesión expira . . . . . . . . . . . : sábado, 4 de julio de 2020 11:18:12
   Puerta de enlace predeterminada . . . . . : 192.168.0.1
   Servidor DHCP . . . . . . . . . . . . . . : 192.168.0.1
   IAID DHCPv6 . . . . . . . . . . . . . . . : 282362327
   DUID de cliente DHCPv6. . . . . . . . . . : 00-01-00-01-20-22-38-A8-D4-81-D7-77-DF-ED
   Servidores DNS. . . . . . . . . . . . . . : 192.168.0.1
   NetBIOS sobre TCP/IP. . . . . . . . . . . : habilitado

Adaptador de LAN inalámbrica Conexión de área local* 3:

   Estado de los medios. . . . . . . . . . . : medios desconectados
   Sufijo DNS específico para la conexión. . :
   Descripción . . . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter
   Dirección física. . . . . . . . . . . . . : 88-78-73-D7-1F-4B
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí

Adaptador de LAN inalámbrica Conexión de área local* 4:

   Estado de los medios. . . . . . . . . . . : medios desconectados
   Sufijo DNS específico para la conexión. . :
   Descripción . . . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #2
   Dirección física. . . . . . . . . . . . . : 8A-78-73-D7-1F-4A
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí

Adaptador de Ethernet Conexión de red Bluetooth 2:

   Estado de los medios. . . . . . . . . . . : medios desconectados
   Sufijo DNS específico para la conexión. . :
   Descripción . . . . . . . . . . . . . . . : Bluetooth Device (Personal Area Network) #2
   Dirección física. . . . . . . . . . . . . : 88-78-73-D7-1F-4E
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí

Adaptador de LAN inalámbrica Wi-Fi 2:

   Estado de los medios. . . . . . . . . . . : medios desconectados
   Sufijo DNS específico para la conexión. . : home
   Descripción . . . . . . . . . . . . . . . : Intel(R) Dual Band Wireless-AC 7265
   Dirección física. . . . . . . . . . . . . : 88-78-73-D7-1F-4A
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2271
Re:W5500 servidor por ethernet
« Respuesta #35 en: 03 de Julio de 2020, 06:51:17 »
Ok.

Descarga e instala en tu portátil Advanced IP Scanner. Explora la red a ver si aparece tu dispositivo.


Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2802
Re:W5500 servidor por ethernet
« Respuesta #36 en: 03 de Julio de 2020, 06:58:49 »
En dinámico aparece el dispositivo, con esos cambios que he realizado, pero en estático no.

Pero revisando todos tus comentarios para ver si se me ocurria algo me he parado en este:

Citar
Si los valores no son esos y la red es más amplia también puede darse el caso de que no pueda acceder porque la IP ya está en uso. Descarga e instala Advanced IP Scanner y pídele que explore el rango 192.168.0.1 - 192.168.1.254 a ver que pasa.

Si tienes definida una IP por defecto en tu dispositivo... ¿es posible que esté en más de una parte del código?. Se me ocurre que estes datos deberían estar en un archivo externo y fácil de modificar, de manera que por defecto tome la IP vía DHCP y a posteriori podamos modificarla.

Creo que pueden venir por aquí los tiros, que se este pisando con la que pongo en memoria por defecto que es 192.168.1.204, esto no me había saltado antes por que de manera dinámica se pisa, y de manera estática, mi router daba la casualidad que es 192.168.1.x pero el de la oficina es 192.168.0.x y aquí no funciona.

voy a ir depurando a ver si es posible que sea esto.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2271
Re:W5500 servidor por ethernet
« Respuesta #37 en: 03 de Julio de 2020, 07:25:40 »
algo que deba cambiar para mejorar mi seguridad?

En las propiedades de tu adaptador de red (Panel de control > Redes e Internet > Conexiones de red) selecciona Protocolo de Internet v4 > Propiedades > Opciones avanzadas > Wins y deshabilita NetBIOS sobre TCP/IP.

Creo que sigue ahí por motivos de compatibilidad pero no es necesario y utiliza un par de puertos con vulnerabilidades conocidas.

saludo

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2802
Re:W5500 servidor por ethernet
« Respuesta #38 en: 03 de Julio de 2020, 08:54:05 »
algo que deba cambiar para mejorar mi seguridad?

En las propiedades de tu adaptador de red (Panel de control > Redes e Internet > Conexiones de red) selecciona Protocolo de Internet v4 > Propiedades > Opciones avanzadas > Wins y deshabilita NetBIOS sobre TCP/IP.

Creo que sigue ahí por motivos de compatibilidad pero no es necesario y utiliza un par de puertos con vulnerabilidades conocidas.

saludo

Pues no lo sabia, voy a cambiarlo inmediatamente.

y efectivamente, el problema era ese, la IP la puedo configurar por 3 sitios distintos, via modbus rtu, via modbus ethernet y de forma manual en el dispositivo, pues en la forma manual, cuando guardaba el tipo de IP lo hacia bien y reiniciaba toda la comunicación ethernet, pero cuando cambiaba la IP manualmente no hacia un reset del ethernet y por lo tanto me ponía la IP por defecto.
No había saltado antes por que daba la casualidad de que mi red eran los mismos números y la posición 204 no estaba cogida. ahora en la red de la oficina como es 192.168.0 no funcionaba.

Los típicos fallos tontos que dan bastante dolor de cabeza, parece que ahora todo va bien.

un saludo y muchas gracias.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw