郁闷的libnet API设计
2006-02-06 01:43
357 查看
看以下两个函数的源代码:
(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.*有缺陷。
(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.*有缺陷。
相关文章推荐
- 架构设计(ASP.NET MVC+Knockout+Web API+SignalR)
- commons-net FTPClient API存取设计
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
- ASP.NET Web API实践系列11,如何设计出优秀的API
- ASP.NET Aries 3.0发布(附带通用API设计及基本教程介绍)
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
- 架构设计(ASP.NET MVC+Knockout+Web API+SignalR)
- 架构设计(ASP.NET MVC+Knockout+Web API+SignalR)
- ASP.NET Aries 3.0发布(附带通用API设计及基本教程介绍)
- 用Visual Studio.NET设计窗体真累
- 异常:Missing artifact net.sf.json-lib:json-lib:jar:x.x.x:compile
- ASP.NET Core API 版本控制
- SOA之路:基于Microsoft.net 平台的SOA 架构设计与开发
- asp.net搜索引擎(网络爬虫)设计及研发
- [备用]权限设计方案、如何使用session、MVC如何使用模板、DropdownList、怎么添加Bootstrape框架、使用ASP.NET MVC 4 Bootstrap Layout Template(VS2012)
- Asp.net WebApi + EF 单元测试架构 DbContext一站到底
- NDatabase 入门,简单使用 增删改查。让NDatabase带你脱离ADO.net,各种SQL 语句,各种DBMS,各种CRM,IOC之类的烦恼。我们也不需要仓库设计模式了,你妹的。不要表了,不要设计数据库字段了。就这样!
- 如何设计好的RESTful API之安全性
- api设计干货
- ASP.NET调试API之Log4net使用指南