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
20
21#pragma pack(push, 1)
42#pragma pack(pop)
43
101class NEFORCE_API icmp_socket final : public socket_base {
102public:
112
124
134
135private:
136 bool receive_reply(milliseconds timeout, uint16_t expected_id, uint16_t expected_seq, ip_address& sender,
137 icmp_header& out_header, vector<char>& out_data, uint8_t& recv_ttl);
138
139 void send_echo_request(const ip_address& dest, uint16_t id, uint16_t seq, uint8_t ttl, const void* data,
140 size_t data_len);
141
142public:
146 icmp_socket() = default;
147
152 explicit icmp_socket(native_handle_type fd) noexcept :
153 socket_base(fd) {}
154
161 void open();
162
174 ping_result ping(const ip_address& dest, milliseconds timeout, uint16_t sequence = 0, const void* data = nullptr,
175 size_t data_len = 0);
176
188 vector<traceroute_hop> traceroute(const ip_address& dest, int max_hops = 30,
189 milliseconds probe_timeout = milliseconds(1000), int probes_per_hop = 3);
190};
191 // Network
193
194NEFORCE_END_NAMESPACE__
195#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地址封装类
int native_handle_type
平台原生句柄类型
socket_base()
默认构造函数
动态大小数组容器
unsigned char uint8_t
8位无符号整数类型
unsigned short uint16_t
16位无符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
NEFORCE_NODISCARD NEFORCE_ALWAYS_INLINE 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
是否到达目标
milliseconds rtt[3]
三次探测的RTT值(-1超时)
ip_address address
跳点IP地址
动态大小数组容器