BCB解析ICMPV6_ECHO_REPLY
来源:互联网 发布:界面设计用什么软件 编辑:程序博客网 时间:2024/05/28 23:12
做IPv6 Ping功能,用到Icmp6SendEcho2和Icmp6ParseReplies。获得ICMPV6_ECHO_REPLY的结构后,取地址,结果不对。
发现是因为地址对齐引起。
ICMPV6_ECHO_REPLY的头文件定义如下:
#include <packon.h>
typedef struct _IPV6_ADDRESS_EX {
USHORT sin6_port;
ULONG sin6_flowinfo;
USHORT sin6_addr[8];
ULONG sin6_scope_id;
} IPV6_ADDRESS_EX, *PIPV6_ADDRESS_EX;
#include <packoff.h>
typedef struct icmpv6_echo_reply_lh {
IPV6_ADDRESS_EX Address; // Replying address.
ULONG Status; // Reply IP_STATUS.
unsigned int RoundTripTime; // RTT in milliseconds.
// Reply data follows this structure in memory.
} ICMPV6_ECHO_REPLY_LH, *PICMPV6_ECHO_REPLY_LH;
typedef ICMPV6_ECHO_REPLY_LH ICMPV6_ECHO_REPLY;
typedef ICMPV6_ECHO_REPLY_LH *PICMPV6_ECHO_REPLY;
问题就在#include <packon.h>, 这个头文件定义了在某些条件下#progma pack(1), 指定以1字节对齐。但是对于BCB来说,这个头文件虽然被包含,但是却没有满足这些条件,所以不会定义#progma pack(1)。 这样,BCB解析的时候,sin6_flowinfo不会从第三个字节开始,而是因为地址对齐从第5个字节开始,引起sin6_addr结果错误。
可以人为在需要的地方#progma pack(1),也可以自己写一个结构,重定义sin6_flowinfo为两个USHORT类型的变量。
- BCB解析ICMPV6_ECHO_REPLY
- [C++ BCB] bcb线程
- bcb 从TColor对象中解析出红、绿、蓝的亮度
- bcb点滴
- BCB小结
- BCB基础知识
- BCB体验
- bcb.exe
- BCB---多线程
- BCB 查找
- BCB快捷键
- bcb 屏保
- BCB快捷键
- 闲谈BCB(一)
- 闲谈BCB(二)
- 闲谈BCB(三)
- 闲谈BCB(四)
- IPC实现代码(BCB)
- 简单的按钮样式
- TStringList的Find(慎用),IndexOf和Sort
- 我最喜欢的10条编程语录
- 学习一年java的迷茫!!
- Qt数据库编程 SQL连接
- BCB解析ICMPV6_ECHO_REPLY
- 顺序表的生成和插入
- 存储过程相关
- iphone-使用TextField及关闭键盘(useing TextField for inputs、using the keyboard)
- c#不可忍受之慢——谁是罪魁祸首
- MySQL卸载
- Java四大核心
- Maven之开始手工搭建第一个maven工程(二)
- 进程/线程同步——Critical Section,Mutex,Semaphore,Event区别