设为首页 加入收藏

TOP

Linux利用TCP协议来获取服务器时间
2015-02-13 18:23:32 来源: 作者: 【 】 浏览:26
Tags:Linux 利用 TCP 协议 获取 服务器 时间

这里使用Unix网络编程里面的一个小程序,该客户端建立一个到服务器的TCP连接,然后读取由服务器以直观可读格式简单地送回的当前时间和日期。


#include?"unp.h"


int main(int argc, char **argv)
{
?int? ? ?sockfd, n;
?char? ? recvline[MAXLINE + 1];
?struct sockaddr_in?servaddr;


?if (argc != 2)
? err_quit("usage: a.out ");


?if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
? err_sys("socket error");


?bzero(&servaddr, sizeof(servaddr));
?servaddr.sin_family = AF_INET;
?servaddr.sin_port? = htons(13);?/* daytime server */
?if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
? err_quit("inet_pton error for %s", argv[1]);


?if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
? err_sys("connect error");


?while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
? recvline[n] = 0;?/* null terminate */
? if (fputs(recvline, stdout) == EOF)
? ?err_sys("fputs error");
?}
?if (n < 0)
? err_sys("read error");


?exit(0);
}


然后我们运行这个程序若干次,每次以不同的IP地址作为命令行参数.


首先我们测试本机的时间,你必须要先打开Linux下的daytime服务,方法如下


sudo apt-get install xinetd
sudo vi /etc/xinetd.d/daytime


找到这一行,然后把yes改成no? ? (disable = yes)? -> (disable = no)


sudo /etc/init.d/xinetd restart


测试本机


结果为:


24 OCT 2014 00:39:36 CST


那么要想测试互联网上服务器的daytime,首先得找到支持用TCP协议返回时间的服务器.测试了一些可能的主机,发现有一些可以返回,一些超时或者拒绝访问。


可能的主机列表如下,就是Windows下右下角时间同步的那个列表。


Linux利用TCP协议来获取服务器时间


这里使用dig指令来解析域名


dig time.windows.com +short


time.microsoft.akadns.net.


64.4.10.33


运行程序尝试获取时间


./daytimetcpcli 64.4.10.33


第一次


connect error: Connection timed out


第二次


connect error: Connection refused


换个服务器


dig time.nist.gov


./daytimetcpcli 128.138.141.172


结果


56953 14-10-23 16:46:39 11 0 0? 0.0 UTC(NIST) *


可以看直观的看出来,当地的时间为下午4点钟.


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言学习之用链表实现通讯录 下一篇Web开发中最致命的8个小错误

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: