NexusForce
1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
icmp_socket.hpp
浏览该文件的文档.
1
#ifndef NEFORCE_NETWORK_ICMP_SOCKET_HPP__
2
#define NEFORCE_NETWORK_ICMP_SOCKET_HPP__
3
11
12
#include "
NeForce/core/container/vector.hpp
"
13
#include "
NeForce/network/socket_base.hpp
"
14
NEFORCE_BEGIN_NAMESPACE__
15
162
163
#pragma pack(push, 1)
177
struct
icmp_header
{
178
uint8_t
type
;
179
uint8_t
code
;
180
uint16_t
checksum
;
181
uint16_t
id
;
182
uint16_t
sequence
;
183
};
184
#pragma pack(pop)
185
202
// TODO: Impl full ICMP socket
203
class
NEFORCE_API
icmp_socket
final :
public
socket_base
{
204
public
:
209
enum
icmp_type
:
uint8_t
{
210
ICMP_ECHO_REPLY
= 0,
211
ICMP_ECHO_REQUEST
= 8,
212
ICMP_TIME_EXCEEDED
= 11
213
};
214
219
struct
ping_result
{
220
ip_address
destination
;
221
milliseconds
rtt
;
222
size_t
reply_size
;
223
uint8_t
reply_ttl
;
224
bool
success
;
225
};
226
231
struct
traceroute_hop
{
232
ip_address
address
;
233
vector<milliseconds>
rtt
;
234
bool
reached
;
235
};
236
237
private
:
238
bool
receive_reply(
milliseconds
timeout,
uint16_t
expected_id,
uint16_t
expected_seq,
ip_address
& sender,
239
icmp_header
& out_header,
vector<char>
& out_data,
uint8_t
& recv_ttl);
240
241
void
send_echo_request(
const
ip_address
& dest,
uint16_t
id
,
uint16_t
seq,
int
ttl,
const
void
*
data
,
242
size_t
data_len);
243
244
public
:
248
icmp_socket
() =
default
;
249
254
explicit
icmp_socket
(
native_handle_type
fd) noexcept :
255
socket_base
(fd) {}
256
263
void
open
();
264
276
ping_result
ping
(
const
ip_address
& dest,
milliseconds
timeout,
uint16_t
sequence = 0,
const
void
*
data
=
nullptr
,
277
size_t
data_len = 0);
278
290
vector<traceroute_hop>
traceroute
(
const
ip_address
& dest,
int
max_hops = 30,
291
milliseconds
probe_timeout =
milliseconds
(1000),
int
probes_per_hop = 3);
292
};
293
// ICMP
295
296
NEFORCE_END_NAMESPACE__
297
#endif
// NEFORCE_NETWORK_ICMP_SOCKET_HPP__
neforce::icmp_socket::icmp_socket
icmp_socket()=default
默认构造函数
neforce::icmp_socket::traceroute
vector< traceroute_hop > traceroute(const ip_address &dest, int max_hops=30, milliseconds probe_timeout=milliseconds(1000), int probes_per_hop=3)
执行Traceroute操作
neforce::icmp_socket::icmp_socket
icmp_socket(native_handle_type fd) noexcept
从原生句柄构造
定义
icmp_socket.hpp:254
neforce::icmp_socket::open
void open()
打开ICMP socket
neforce::icmp_socket::icmp_type
icmp_type
ICMP消息类型常量
定义
icmp_socket.hpp:209
neforce::icmp_socket::ICMP_ECHO_REPLY
@ ICMP_ECHO_REPLY
Echo Reply(Ping响应)
定义
icmp_socket.hpp:210
neforce::icmp_socket::ICMP_ECHO_REQUEST
@ ICMP_ECHO_REQUEST
Echo Request(Ping请求)
定义
icmp_socket.hpp:211
neforce::icmp_socket::ICMP_TIME_EXCEEDED
@ ICMP_TIME_EXCEEDED
Time Exceeded(TTL超时)
定义
icmp_socket.hpp:212
neforce::icmp_socket::ping
ping_result ping(const ip_address &dest, milliseconds timeout, uint16_t sequence=0, const void *data=nullptr, size_t data_len=0)
执行Ping操作
neforce::ip_address
IP地址封装类
定义
ip_address.hpp:49
neforce::socket_base::native_handle_type
uintptr_t native_handle_type
平台原生句柄类型
定义
socket_base.hpp:83
neforce::socket_base::socket_base
socket_base()
默认构造函数
neforce::vector
动态大小数组容器
定义
vector.hpp:167
neforce::uint8_t
unsigned char uint8_t
8位无符号整数类型
定义
typeinfo/types.hpp:97
neforce::uint16_t
unsigned short uint16_t
16位无符号整数类型
定义
typeinfo/types.hpp:103
neforce::milliseconds
duration< int64_t, milli > milliseconds
毫秒持续时间
定义
duration.hpp:157
neforce::data
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
定义
type_erase.hpp:395
socket_base.hpp
Socket基础类实现
neforce::icmp_header
ICMP头部结构定义
定义
icmp_socket.hpp:177
neforce::icmp_header::checksum
uint16_t checksum
校验和
定义
icmp_socket.hpp:180
neforce::icmp_header::sequence
uint16_t sequence
序列号
定义
icmp_socket.hpp:182
neforce::icmp_header::id
uint16_t id
标识符
定义
icmp_socket.hpp:181
neforce::icmp_header::type
uint8_t type
ICMP消息类型
定义
icmp_socket.hpp:178
neforce::icmp_header::code
uint8_t code
消息代码
定义
icmp_socket.hpp:179
neforce::icmp_socket::ping_result
Ping操作结果
定义
icmp_socket.hpp:219
neforce::icmp_socket::ping_result::success
bool success
是否成功收到响应
定义
icmp_socket.hpp:224
neforce::icmp_socket::ping_result::destination
ip_address destination
目标地址
定义
icmp_socket.hpp:220
neforce::icmp_socket::ping_result::reply_ttl
uint8_t reply_ttl
响应TTL值
定义
icmp_socket.hpp:223
neforce::icmp_socket::ping_result::reply_size
size_t reply_size
响应数据大小(字节)
定义
icmp_socket.hpp:222
neforce::icmp_socket::ping_result::rtt
milliseconds rtt
往返时间
定义
icmp_socket.hpp:221
neforce::icmp_socket::traceroute_hop
Traceroute跳点信息
定义
icmp_socket.hpp:231
neforce::icmp_socket::traceroute_hop::rtt
vector< milliseconds > rtt
每次探测的RTT值(-1超时)
定义
icmp_socket.hpp:233
neforce::icmp_socket::traceroute_hop::reached
bool reached
是否到达目标
定义
icmp_socket.hpp:234
neforce::icmp_socket::traceroute_hop::address
ip_address address
跳点IP地址
定义
icmp_socket.hpp:232
vector.hpp
动态大小数组容器
include
NeForce
network
icmp_socket.hpp
制作者
1.16.0