NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
neforce::icmp_socket类 参考final

ICMP Socket类 更多...

#include <icmp_socket.hpp>

类 neforce::icmp_socket 继承关系图:
[图例]

struct  ping_result
 Ping操作结果 更多...
struct  traceroute_hop
 Traceroute跳点信息 更多...

Public 类型

enum  icmp_type : uint8_t { ICMP_ECHO_REPLY = 0 , ICMP_ECHO_REQUEST = 8 , ICMP_TIME_EXCEEDED = 11 }
 ICMP消息类型常量 更多...
Public 类型 继承自 neforce::socket_base
enum class  type : int32_t {
  STREAM = SOCK_STREAM , DGRAM = SOCK_DGRAM , RAW = SOCK_RAW , RDM = SOCK_RDM ,
  SEQPACKET = SOCK_SEQPACKET , CLOEXEC = SOCK_CLOEXEC , NONBLOCK = SOCK_NONBLOCK , DCCP = SOCK_DCCP
}
 socket 类型枚举 更多...
enum class  protocol : int32_t {
  AUTO = 0 , ICMP = IPPROTO_ICMP , TCP = IPPROTO_TCP , UDP = IPPROTO_UDP ,
  SCTP = IPPROTO_SCTP , RAW = IPPROTO_RAW , ESP = IPPROTO_ESP , AH = IPPROTO_AH ,
  DCCP = IPPROTO_DCCP , IP = ETH_P_IP , ARP = ETH_P_ARP , IPV6 = ETH_P_IPV6 ,
  LAT = ETH_P_LAT , VLAN = ETH_P_8021Q , LLDP = ETH_P_LLDP , MPLS = ETH_P_MPLS_UC
}
 socket 协议枚举 更多...
using native_handle_type
 平台原生句柄类型
using family = ip_address::family
 网络地址族类型

Public 成员函数

 icmp_socket ()=default
 默认构造函数
 icmp_socket (native_handle_type fd) noexcept
 从原生句柄构造
void open ()
 打开ICMP socket
ping_result ping (const ip_address &dest, milliseconds timeout, uint16_t sequence=0, const void *data=nullptr, size_t data_len=0)
 执行Ping操作
vector< traceroute_hoptraceroute (const ip_address &dest, int max_hops=30, milliseconds probe_timeout=milliseconds(1000), int probes_per_hop=3)
 执行Traceroute操作
Public 成员函数 继承自 neforce::socket_base
 socket_base ()
 默认构造函数
 socket_base (const native_handle_type fd) noexcept
 从原生句柄构造
 socket_base (socket_base &&other) noexcept
 移动构造函数
socket_baseoperator= (socket_base &&other) noexcept
 移动赋值运算符
virtual ~socket_base ()
 析构函数
native_handle_type native_handle () const noexcept
 获取原生句柄
bool is_open () const noexcept
 检查socket是否已打开
 operator bool () const noexcept
 布尔转换运算符
void open (family f, type t=type::STREAM, protocol p=protocol::AUTO)
 打开socket
virtual bool close () noexcept
 关闭socket
bool try_open (family f, type t=type::STREAM, protocol p=protocol::AUTO) noexcept
 尝试打开socket
bool is_nonblocking () const noexcept
 查询是否为非阻塞模式
bool set_nonblocking (bool enable) noexcept
 设置非阻塞模式
bool shutdown_send () noexcept
 关闭发送方向
bool shutdown_receive () noexcept
 关闭接收方向
bool shutdown_both () noexcept
 关闭双向通信
bool set_option (int level, int optname, const void *value, ::socklen_t len) noexcept
 设置socket选项
bool get_option (int level, int optname, void *optval, ::socklen_t *optlen) const noexcept
 获取socket选项
bool get_reuse_address () const noexcept
 查询地址重用
bool set_reuse_address (bool enable=true) noexcept
 设置地址重用
bool get_reuse_port () const noexcept
 查询端口重用
bool set_reuse_port (bool enable=true) noexcept
 设置端口重用
bool get_keep_alive () const noexcept
 查询TCP KeepAlive
bool set_keep_alive (bool enable=true) noexcept
 设置TCP KeepAlive
bool get_tcp_nodelay () const noexcept
 查询Nagle算法
bool set_tcp_nodelay (bool enable=true) noexcept
 设置禁用Nagle算法
int get_receive_buffer_size () const noexcept
 查询接收缓冲区大小
bool set_receive_buffer_size (int size) noexcept
 设置接收缓冲区大小
int get_send_buffer_size () const noexcept
 查询发送缓冲区大小
bool set_send_buffer_size (int size) noexcept
 设置发送缓冲区大小
optional< millisecondsget_send_timeout () const noexcept
 获取发送超时时间
bool set_send_timeout (milliseconds timeout) noexcept
 设置发送超时时间
optional< millisecondsget_receive_timeout () const noexcept
 获取接收超时时间
bool set_receive_timeout (milliseconds timeout) noexcept
 设置接收超时时间
optional< ip_addresslocal_endpoint () const
 获取本地端点地址
optional< ip_addressremote_endpoint () const
 获取远程端点地址
void bind (const ip_address &endpoint)
 绑定socket到本地地址
void listen (int backlog)
 开始监听连接(TCP)
native_handle_type release () noexcept
 释放socket所有权

额外继承的成员函数

静态 Public 属性 继承自 neforce::socket_base
static constexpr native_handle_type invalid_handle
 无效句柄常量
Protected 属性 继承自 neforce::socket_base
native_handle_type fd_ = invalid_handle
 Socket句柄
bool nonblocking_ {false}
 非阻塞模式状态跟踪

详细描述

ICMP Socket类

实现ICMP协议的原始套接字,支持Ping和Traceroute功能。

主要功能:

  • ICMP Echo请求/回复(Ping)
  • 网络路径追踪(Traceroute)
  • ICMP超时消息处理
  • RTT(往返时间)测量
  • TTL设置和读取
注解
在Linux上需要root权限才能创建原始ICMP套接字。 Windows可能需要管理员权限。

在文件 icmp_socket.hpp203 行定义.

成员枚举类型说明

◆ icmp_type

ICMP消息类型常量

枚举值
ICMP_ECHO_REPLY 

Echo Reply(Ping响应)

ICMP_ECHO_REQUEST 

Echo Request(Ping请求)

ICMP_TIME_EXCEEDED 

Time Exceeded(TTL超时)

在文件 icmp_socket.hpp209 行定义.

构造及析构函数说明

◆ icmp_socket()

neforce::icmp_socket::icmp_socket ( native_handle_type fd)
inlineexplicitnoexcept

从原生句柄构造

参数
fd原生socket句柄

在文件 icmp_socket.hpp254 行定义.

成员函数说明

◆ open()

void neforce::icmp_socket::open ( )

打开ICMP socket

异常
socket_exception创建失败时抛出

创建原始ICMP套接字,需要适当权限。

◆ ping()

ping_result neforce::icmp_socket::ping ( const ip_address & dest,
milliseconds timeout,
uint16_t sequence = 0,
const void * data = nullptr,
size_t data_len = 0 )

执行Ping操作

参数
dest目标IPv4地址
timeout超时时间
sequence序列号(默认0)
data附加数据(可选)
data_len附加数据长度
返回
Ping结果

发送ICMP Echo请求并等待响应,测量RTT。

引用了 neforce::data().

◆ traceroute()

vector< traceroute_hop > neforce::icmp_socket::traceroute ( const ip_address & dest,
int max_hops = 30,
milliseconds probe_timeout = milliseconds(1000),
int probes_per_hop = 3 )

执行Traceroute操作

参数
dest目标IPv4地址
max_hops最大跳数(默认30)
probe_timeout每跳探测超时时间(默认1000ms)
probes_per_hop每跳探测次数(默认3)
返回
跳点信息列表

通过逐步增加TTL值探测网络路径, 收集每个中间路由器的IP地址和响应时间。


该类的文档由以下文件生成: