NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
icmp_socket.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_ICMP_SOCKET_HPP__
2#define NEFORCE_NETWORK_ICMP_SOCKET_HPP__
3
11
14NEFORCE_BEGIN_NAMESPACE__
15
162
163#pragma pack(push, 1)
184#pragma pack(pop)
185
202class NEFORCE_API icmp_socket final : public socket_base {
203public:
213
225
235
236private:
237 bool receive_reply(milliseconds timeout, uint16_t expected_id, uint16_t expected_seq, ip_address& sender,
238 icmp_header& out_header, vector<char>& out_data, uint8_t& recv_ttl);
239
240 void send_echo_request(const ip_address& dest, uint16_t id, uint16_t seq, int ttl, const void* data,
241 size_t data_len);
242
243public:
247 icmp_socket() = default;
248
253 explicit icmp_socket(native_handle_type fd) noexcept :
254 socket_base(fd) {}
255
262 void open();
263
275 ping_result ping(const ip_address& dest, milliseconds timeout, uint16_t sequence = 0, const void* data = nullptr,
276 size_t data_len = 0);
277
289 vector<traceroute_hop> traceroute(const ip_address& dest, int max_hops = 30,
290 milliseconds probe_timeout = milliseconds(1000), int probes_per_hop = 3);
291};
292 // ICMP
294
295NEFORCE_END_NAMESPACE__
296#endif // NEFORCE_NETWORK_ICMP_SOCKET_HPP__
ping_result ping(const ip_address &dest, milliseconds timeout, uint16_t sequence=0, const void *data=nullptr, size_t data_len=0)
执行Ping操作
icmp_type
ICMP消息类型常量
@ ICMP_ECHO_REQUEST
Echo Request(Ping请求)
@ ICMP_TIME_EXCEEDED
Time Exceeded(TTL超时)
@ ICMP_ECHO_REPLY
Echo Reply(Ping响应)
icmp_socket(native_handle_type fd) noexcept
从原生句柄构造
vector< traceroute_hop > traceroute(const ip_address &dest, int max_hops=30, milliseconds probe_timeout=milliseconds(1000), int probes_per_hop=3)
执行Traceroute操作
void open()
打开ICMP socket
icmp_socket()=default
默认构造函数
IP地址封装类
::UINT_PTR native_handle_type
平台原生句柄类型
socket_base()
默认构造函数
动态大小数组容器
unsigned char uint8_t
8位无符号整数类型
unsigned short uint16_t
16位无符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
Socket基础类实现
ICMP头部结构定义
uint8_t type
ICMP消息类型
uint16_t sequence
序列号
uint16_t checksum
校验和
uint8_t code
消息代码
uint16_t id
标识符
ip_address destination
目标地址
size_t reply_size
响应数据大小(字节)
uint8_t reply_ttl
响应TTL值
bool success
是否成功收到响应
milliseconds rtt
往返时间
bool reached
是否到达目标
vector< milliseconds > rtt
每次探测的RTT值(-1超时)
ip_address address
跳点IP地址
动态大小数组容器