linux下 实现traceroute
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.#include
2.#include
3.#include
4.#include
5.#include
6.#include
7.#include
8.#include
9.#include
10.#include
11.#include
12.#include
13.#include
14.
15.struct ip
16.{
17.#if __BYTE_ORDER == __LITTLE_ENDIAN
18. unsigned int ip_hl:4; /* little-endian IP头长度(单位
为32位)4位 */
19. unsigned int ip_v:4; /* 版本号4 IP4用4 */
20.#endif
21.#if __BYTE_ORDER == __BIG_ENDIAN
22. unsigned int ip_v:4; /* version */
23. unsigned int ip_hl:4; /* header length */
24.#endif
25. u_int8_t ip_tos; /* 服务类型一般为0 */
26. u_short ip_len; /* 数据总长度 (单位为32位) */
27. u_short ip_id; /* 标识16 */
28. u_short ip_off; /* 分段偏移*/
29.#define IP_RF 0x8000 /* reserved fragment标
志 */
30.#define IP_DF 0x4000 /* dont fragment flag */
31.#define IP_MF 0x2000 /* more fragments flag */
32.#define IP_OFFMASK 0x1fff /* mask for fragmenting bits
*/
33. u_int8_t ip_ttl; /* 生存时间 */
34. u_int8_t ip_p; /* 传输协议 tcp是6 */
35. u_short ip_sum; /* 头校验和 */
36.struct in_addr ip_src, ip_dst; /* 源地址目标地址 */
37.};
38.
39.struct icmp
40.{
41.u_int8_t type; /* 消息类型 */
42. u_int8_t code; /* 代码类型 */
43. u_int16_t checksum; /* 校验位 */
44.union
45. {
46. u_char ih_pptr; /* ICMP_PARAMPROB */
47.struct in_addr ih_gwaddr; /* 网关地址 */
48.struct/* echo 数据包 */
49.{
50. u_int16_t id;
51. u_int16_t sequence;
52. } echo;
53.
54. u_int32_t ih_void;
55.
56.struct ih_pmtu
57. {
58. u_int16_t ipm_void;
59. u_int16_t ipm_nextmtu;
60.} ih_pmtu;
61.
62.struct ih_rtradv
63. {
64.u_int8_t irt_num_addrs;
65.u_int8_t irt_wpa;
66.u_int16_t irt_lifetime;
67. } ih_rtradv;
68. } un;
69.#define icmp_pptr un.ih_pptr
70.#define icmp_gwaddr un.ih_gwaddr
71.#define icmp_id un.echo.id
72.#define icmp_seq un.echo.sequence
73.#define icmp_void un.ih_void
74.#define icmp_pmvoid un.ih_pmtu.ipm_void
75.#define icmp_nextmtu un.ih_pmtu.ipm_nextmtu
76.#define icmp_num_addrs un.ih_rtradv.irt_num_addrs
77.#define icmp_wpa un.ih_rtradv.irt_wpa
78.#define icmp_lifetime un.ih_rtradv.irt_lifetime
79.
80.union
81.{
82.struct
83. {
84. u_int32_t its_otime;
85.u_int32_t its_rtime;