winpcap编程中遇到的问题及解决方法

本文总结了Winpcap编程中遇到的问题,包括类型定义如u_int与int的区别,ntohs()函数在网络字节序转换中的作用,Inet_ntoa()的使用注意事项,以及输出格式调整和VS环境配置的建议。通过这些问题的探讨,有助于理解Winpcap编程的细节和解决常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是从这次编程过程中总结的小收获,总结如下,可能不难,但借此机会整理如下,供以后查看作为参考:

 

1)首先是各个类型的定义,这是以前自己没有注意过的,现在总结如下:

u_intintu_charchar,这两组类型变量在内存里分别所占的长度是一样的

u_int/int4个字节,u_char/char1个字节。

这些类型的使用场合:

u_intunsigned int)表示无符号整形,意味着该变量的值不会出现负数;

int表示有符号整形,意味着该变量可以是正、负数;

u_char数组(或者指针),表示该变量是(或者指向)二进制数据,即里面可能有不可见字符;

char数组则一般是可见字符串了。

uint8_tuint16_tuint32_其实这些都不是新的数据类型,它们只是使用typedef给类型起的别名,这样其实是为了程序的规范,或者是为了以后修改代码比较方便。

查看定义可以发现如下:

typedef unsigned char u_int8_t;(u_char)

typedef signed char int8_t;

typedef unsigned int u_int16_t;(u_int)

typedef signed int int16_t;

 

2)winpcap网络编程中有其很多特殊性,因此说一下其中的某些函数。

首先这个程序中最重要的ntohs() 

解释:将一个无符号短整形数从网络字节顺序转换为主机字节顺序。

#include <winsock.h>  

u_short PASCAL FAR ntohs( u_short netshort); 

netshort:一个以网络字节顺序表达的16位数。

其实也就是将一个16位数由网络字节顺序转换为主机字节顺序。

好,那么问题来了,什么是网络字节顺序与主机字节顺序呢,这是自己在编程过程中一直存在的问题,后来终于看懂了:

首先介绍两种字节序类型

1. Little endian:将低序字节存储在起始地址

2. Big endian:将高序字节存储在起始地址

前者就是我们平时用的x86系列机子的顺序,及我们上学期在计算机组成原理中学的,地址低位存储值的低位  ;地址高位存储值的高位。

后者是比较直观的方式,只需要把内存地址从左到右按照由低到高的顺序写出。这就是网络字节顺序。网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。

为了更直观的了解,下面我从程序中截了一个屏

 

我把程序中nthos()这个注释掉的结果是如上所数据示的,为了方便看,我加了一个display()函数,这样对比看的比较清晰。

 

3)由于winpcap网络编程中IP

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值