Wiz200web에 NTP기능을 추가하려고 합니다


#1

Wiz200에 NTP기능을 추가하려고 합니다…

먼저 NTP부분은…

NTP(5, Sn_MR_UDP, 123, 0);

unsigned int NTP(SOCKET s, uint8 protocol, uint16 port, uint16 flag)
{
uint8 ntpbuffer[48];
uint32 len;
unsigned char servip[4] = NTP_IP;
unsigned int *secsptr = NULL;
int received = 0;

close(s);
socket(s, Sn_MR_UDP, port, flag);

memset(ntpbuffer, 0, 48);
        
ntpbuffer[0] = 0x1B;

sendto(s, ntpbuffer, 48, servip, port);

while (!received)
{
    if ((len = getSn_RX_RSR(s)) > 0)
    {
        uint8 destip[4];
        uint16 destport;

        len = recvfrom(s, ntpbuffer, len, destip, &destport);
        received = 1;
    }
}

close(s);

return 1;

}

위와 같이 작성하여 먼저 패킷전송부터 하려고합니다.
NTP_IP에 255.255.255.255로 저장을 하고 실행하면 그림처럼 나오는데…
203.248.240.140(time.bora.net)으로 하면 아무것도 안나옵니다…
sendto 함수 리턴값은 48이 나옵니다… 그런데 와이어샤크에는 아무것도 안잡히네요…
답변부탁드립니다…



#2

언급하신 상황에서 Wireshark에 패킷이 잡히지 않는 것은 정상으로 보입니다.
모듈에서 255.255.255.255로 패킷을 broadcast 하는 경우, PC도 동일 서브넷에 연결되어 있기에 PC의 wireshark 프로그램에서 해당 패킷을 잡을 수 있습니다.
하지만 NTP server로 unicast 하는 경우, [모듈 -> NTP server]로 바로 패킷이 보내지므로 PC에서 해당 패킷을 잡을 수 없는 상황입니다.
sendto 함수가 timeout 발생 없이 정상적으로 보낸 데이터의 length를 리턴하였기에 데이터 전송은 잘 이루어졌으리라 생각됩니다.

모듈에서 unicast로 패킷을 전송할 때 PC 측에서 패킷을 확인하시려면,
더미허브 등의 포트 미러링이 가능한 장비를 이용하셔서 모듈에 연결된 포트의 패킷들을 PC 쪽에서도 확인할 수 있도록 해 주시면 됩니다.