设为首页 加入收藏

TOP

ping命令的C语言实现(linux, IPv4,简单版)(三)
2014-11-23 23:18:08 来源: 作者: 【 】 浏览:8
Tags:ping 命令 语言 实现 linux IPv4 简单
ror");
return res;
}
char *sock_ntop_host(const struct sockaddr *sa, socklen_t salen)
{
static char str[128];
struct sockaddr_in *sin = (struct sockaddr_in *) sa;
//本程序只支持IPv4协议
if( sa->sa_family != AF_INET )
error_quit("sock_ntop_host: the type must be AF_INET");
if (inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) == NULL)
error_quit("inet_ntop error");
return str;
}
//《UNIX网络编程》书上的 源码
uint16_t in_cksum(uint16_t *addr, int len)
{
int nleft = len;
uint32_t sum = 0;
uint16_t *w = addr;
uint16_t answer = 0;
/*
* Our algorithm is simple, using a 32 bit accumulator (sum), we add
* sequential 16 bit words to it, and at the end, fold back all the
* carry bits from the top 16 bits into the lower 16 bits.
*/
while (nleft > 1)
{
sum += *w++;
nleft -= 2;
}
/* 4mop up an odd byte, if necessary */
if (nleft == 1) {
*(unsigned char *)(&answer) = *(unsigned char *)w ;
sum += answer;
}
/* 4add back carry outs from top 16 bits to low 16 bits */
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
answer = ~sum; /* truncate to 16 bits */
return(answer);
}
void error_quit(const char *str)
{
//输出错误信息,退出程序
fprintf(stderr, "%s", str);
if( errno != 0 )
fprintf(stderr, " : %s", strerror(errno));
fprintf(stderr, "\n");
exit(1);
} www.2cto.com
运行示例:
qch@ LinuxMint ~/program/tcode $ gcc myping.c -o myping
qch@LinuxMint ~/program/tcode $ sudo ./myping www.baidu.com
PING www.a.shifen.com (115.239.210.26): 56 data bytes
64 bytes from 115.239.210.26: seq=0, ttl=128, rtt=31.272 ms
64 bytes from 115.239.210.26: seq=1, ttl=128, rtt=34.722 ms
64 bytes from 115.239.210.26: seq=2, ttl=128, rtt=30.822 ms
64 bytes from 115.239.210.26: seq=3, ttl=128, rtt=31.273 ms
64 bytes from 115.239.210.26: seq=4, ttl=128, rtt=29.995 ms
...........................
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言中一些容易被人忽略的东西 .. 下一篇C语言中一些容易被人忽略的东西 ..

评论

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