没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
10页
SOCK_DGRAM类型的socket常用于UDP通信,本文将尝试把这种socket用于ICMP协议,并完成一个简单的ping程序。使用ping去测试某个主机是否可用可能是一件很平常的事,尽管ping非常普通,但是编写一个实现ping功能的程序却并不是那么简单,因为ping使用的ICMP协议并不是一个应用层协议,在网上看到的实现ping的例子大多使用raw socket去实现,不仅增加了解析IP报头的麻烦,而且还需要有root权限才能运行,本文简要介绍ICMP协议,并给出一个使用普通的常用于UDP通信的socket实现ping的实例,本文将提供完整的源程序,本文的程序在 Ubuntu 20.04 下测试通过,gcc 版本号 9.4.0;阅读本文需要熟悉socket编程,对初学者而言,本文有一定的难度。
资源推荐
资源详情
资源评论
使
⽤
SOCK_DGRAM
类
型
的
socket
实
现
的
ping
程
序
---- Written by whowin
SOCK_DGRAM
类
型
的
socket
常
⽤
于
UDP
通
信
,
本
⽂
将尝
试
把
这
种
socket
⽤
于
ICMP
协
议
,
并
完
成
⼀个
简
单
的
ping
程
序
。
使
⽤
ping
去
测
试
某
个主
机
是
否
可
⽤
可
能
是
⼀
件
很
平
常
的
事
,
尽
管
ping
⾮
常
普
通
,
但
是
编
写
⼀个
实
现
ping
功
能
的
程
序
却
并
不
是
那
么
简
单
,
因
为
ping
使
⽤
的
ICMP
协
议
并
不
是
⼀个
应
⽤
层
协
议
,
在
⽹
上
看
到
的
实
现
ping
的
例
⼦
⼤多
使
⽤
raw socket
去
实
现
,
不
仅
增
加
了
解
析
IP
报
头
的
⿇
烦
,
⽽
且
还
需
要
有
root
权
限
才
能
运
⾏
,
本
⽂
简
要
介
绍
ICMP
协
议
,
并
给
出
⼀个
使
⽤
普
通
的
常
⽤
于
UDP
通
信
的
socket
实
现
ping
的
实
例
,
本
⽂
将
提
供
完
整
的
源
程
序
,
本
⽂
的
程
序
在
Ubuntu 20.04
下
测
试
通过
,
gcc
版
本
号
9.4.0
;
阅
读
本
⽂
需
要
熟
悉
socket
编
程
,
对
初
学
者⽽
⾔
,
本
⽂
有
⼀
定
的
难
度
。
1.
前
⾔
ICMP
协
议
和
UDP
⼀
样
,
都
是
⾯
向
⽆
连
接
的
;
发
送
⼀个
ICMP
数
据
包
和
发
送
⼀个
UDP
数
据
包
⾮
常
类
似
,
对
UDP
⽽
⾔
是
构
建
⼀个
UDP
报
头
然
后
和
数
据
⼀
起
发
出
去
,
对
ICMP
⽽
⾔
就
是
构
建
⼀个
ICMP
报
头
然
后
和
数
据
⼀
起
发
出
去
;
创
建
⼀个
socket
时
,
常
⽤
的
socket
类
型
有
三
种
:
SOCK_STREAM
、
SOCK_DGRAM
和
SOCK_RAW
,
SOCK_STREAM
常
⽤
于
TCP
通
信
,
SOCK_DGRAM
常
⽤
于
UDP
通
信
,
SOCK_RAW
⽤
于
接
收
和
发
送
原
始
数
据
包
;
其
实
socket
的
种
类
也不
⽌
这
三
种
,
这
些
socket
类
型
定
义
在
头
⽂
件
<bits/socket_type.h>
中
,
但
除
了
常
⽤
的
这
三
个
外
,
其
它
的
基
本
都
还
没
有
实
现
,
⼤多
是
因
为
缺
少
标
准
的
协
议
⽀
持
,
还
有
的
是
已
经
淘
汰
的
socket
类
型
,
⽐
如
SOCK_PACKET
;
可
以
⽤
下
⾯
的
代
码
测
试
在
你
的
操
作
系
统
下
,
是
否
⽀
持
某
个
的
socket
类
型
,
以
SOCK_RDM
为
例
:
运
⾏
结
果
截
图
SOCK_STREAM
这
种
socket
类
型
显
然
不
适
合
⽤
在
ping
程
序
上
,
因
为
这
种
socket
是
⾯
向
连
接
的
,
使
⽤
之
前
要
先
建
⽴
连
接
,
但
是
如
果
可
以
建
⽴
了
连
接
就
完
全
没
有
必
要
使
⽤
ping
去
测
试
⽬
的
主
机
是
否
可
⽤
了
,
SOCK_RAW
过
于
复
杂
⽽
且
必
须
要
有
root
权
限
才
能
运
⾏
,
我
们
放
弃
不
⽤
,
所
以
最
终
我
们
使
⽤
SOCK_DGRAM
来
尝
试
发
送
ICMP
数
据
包
以
实
现
⼀个
ping
程
序
;
2. ICMP
协
议
经
常
编
写
⽹
络
程
序
的
程
序
员
应
该
都
很
熟
悉
IP
协
议
,
IP
协
议
没
有
任
何
内
在
机
制
来
发
送
错
误
和
控
制
消
息
,
也
就
是
说
如
果
⽹
络
通
信
出
现
问
题
,
IP
协
议
本
⾝
是⽆
法
得
知
原
因
的
,
所
以
需
要
ICMP
协
议
来
帮
助
IP
协
议
来
完
成
这
件
事
;
#include <stdio.h>
#include <sys/socket.h>
int main() {
int sock_fd = socket(AF_INET, SOCK_RDM, 0 );
perror("socket: ");
printf("sock_fd: %d", sock_fd);
return 0;
}
0020-
使
⽤
SOCK_DGRAM
类
型
的
socket
实
现
的
ping
程
序
- Written by whowin
1 / 10
资源评论
whowin
- 粉丝: 257
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功