郁闷的libnet API设计

简介:
看以下两个函数的源代码:

(1)构建ipv4 header的函数
libnet_ptag_t
libnet_build_ipv4(u_int16_t len, u_int8_t tos, u_int16_t id, u_int16_t frag,
u_int8_t ttl, u_int8_t prot, u_int16_t sum, u_int32_t src, u_int32_t dst,
u_int8_t 
* payload, u_int32_t payload_s, libnet_t  * l, libnet_ptag_t ptag)
{
    

    ip_hdr.ip_tos        
=  tos;                        /*  IP tos  */
    ip_hdr.ip_len        
=  htons(h);                   /*  total length  */
    ip_hdr.ip_id         
=  htons(id);                  /*  IP ID  */
    ip_hdr.ip_off        
=  htons(frag);                /*  fragmentation flags  */
    ip_hdr.ip_ttl        
=  ttl;                        /*  time to live  */
    ip_hdr.ip_p          
=  prot;                       /*  transport protocol  */
    ip_hdr.ip_sum        
=  (sum  ?  htons(sum) :  0 );     /*  checksum  */
    ip_hdr.ip_src.s_addr 
=  src;                        /*  source ip  */
    ip_hdr.ip_dst.s_addr 
=  dst;                        /*  destination ip  */

    

}

(2)构建udp header的函数
libnet_ptag_t
libnet_build_udp(u_int16_t sp, u_int16_t dp, u_int16_t len, u_int16_t sum,
u_int8_t 
* payload, u_int32_t payload_s, libnet_t  * l, libnet_ptag_t ptag)
{
    

    udp_hdr.uh_sport   
=  htons(sp);              /*  source port  */
    udp_hdr.uh_dport   
=  htons(dp);              /*  destination port  */
    udp_hdr.uh_ulen    
=  htons(h);               /*  total length of UDP packet */
    udp_hdr.uh_sum     
=  (sum  ?  htons(sum) :  0 ); /*  checksum  */

    
}

其中,第一个函数中,ip参数需要以网络字节序传入,第二个函数中,端口参数需要以本机字节序传入。真是一个别扭啊。写程序,又是抓包,又是打印字节,折腾了很长时间才确定不是我的代码有问题,而是libnet1.1.*有缺陷。

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2006/02/06/325888.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

相关文章
|
XML JSON 前端开发
软件测试|Spring Boot 的 RESTful API 设计与实现
软件测试|Spring Boot 的 RESTful API 设计与实现
软件测试|Spring Boot 的 RESTful API 设计与实现
|
消息中间件 JSON 缓存
如何设计 API 接口,实现统一格式返回?
如何设计 API 接口,实现统一格式返回?
如何设计 API 接口,实现统一格式返回?
|
算法 前端开发 安全
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
|
JSON 监控 安全
22条API设计的最佳实践
22条API设计的最佳实践
22条API设计的最佳实践
|
SQL 安全 Java
微服务API开放授权平台的设计与实现
微服务API开放授权平台的设计与实现
661 0
微服务API开放授权平台的设计与实现
|
XML SQL JSON
RESTful API 设计指南
RESTful API 设计指南
445 0
RESTful API 设计指南
|
API 微服务 Java
Netflix 实用 API 设计 (下)
Netflix 实用 API 设计 (下)
339 0
Netflix 实用 API 设计 (下)
|
分布式计算 安全 API
异步 API 设计之扇入扇出模式
扇出/扇入模式是更高级 API 集成的主要内容。这些应用程序并不总是表现出相同的可用性或性能特征。
异步 API 设计之扇入扇出模式
|
JSON 监控 API
22 条 API 设计最佳实践,快收藏。。(1)
22 条 API 设计最佳实践,快收藏。。(1)
253 0
22 条 API 设计最佳实践,快收藏。。(1)
|
JSON 前端开发 安全
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(二)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(二)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(二)