gpt4 book ai didi

c - 将数据从 iphdr 传递到结构

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:10 28 4
gpt4 key购买 nike

我在 C 编程方面不是很有经验,但我尝试使用 C 捕获和分析数据包数据,但我遇到了一个问题,我无法将数据传递给 stuct 内的变量。有我的结构:

struct ipOut {
unsigned int ipVer;
unsigned int headerDWORDS;
unsigned int headerBytes;
unsigned int typeOfService;
unsigned int ipLength;
unsigned int ident;
unsigned int ttl;
unsigned int protocolNum;
unsigned int checkSum;
};
struct ipAddr{
char srcIP[16];
char destIP[16];
};
struct hexOut{
unsigned char * hexBuff;
};
struct sockaddr_in src, dest;

我已经从套接字中获取工作数据并将缓冲区发送到 iphdr:

void ipHeaderOutput(unsigned char * buff, int data) {
packetNum++;
struct iphdr *iph = (struct iphdr*)buff;
memset(&src, 0, sizeof(src));
memset(&dest, 0, sizeof(dest));
src.sin_addr.s_addr = iph->saddr;
dest.sin_addr.s_addr = iph->daddr;

struct ipOut ipHeader[packetNum];
ipHeader[packetNum].ipVer = iph->version;
ipHeader[packetNum].headerDWORDS = (unsigned int)iph->ihl;
ipHeader[packetNum].headerBytes = (unsigned int)iph->ihl*4;
ipHeader[packetNum].typeOfService = (unsigned int)iph->tos;
ipHeader[packetNum].ipLength = ntohs(iph->tot_len);
ipHeader[packetNum].ident = ntohs(iph->id);
ipHeader[packetNum].ttl = (unsigned int)iph->ttl;
ipHeader[packetNum].protocolNum = (unsigned int)iph->protocol;
ipHeader[packetNum].checkSum = ntohs(iph->check);

struct ipAddr ipAddr[packetNum];
strcpy(ipAddr[packetNum].srcIP, inet_ntoa(src.sin_addr));
strcpy(ipAddr[packetNum].destIP, inet_ntoa(dest.sin_addr));
}

ipAddr 结构可以完美地获取数据,没有任何问题。但是,数据根本没有传递给 ipOut 结构。我在将数据从缓冲区传递给 hexOut 结构时也遇到了同样的问题:

void hexDataOut(unsigned char * buff, int data){
hexNum++;

struct hexOut h[hexNum];
h[hexNum].hexBuff = (unsigned char *)malloc(65536);
memcpy(h[hexNum].hexBuff, buff, 65536);
h[hexNum].hexBuff = buff;
}

另外,创建动态结构标签的正确方法是什么?

最佳答案

让我们仔细看看这两行:

struct ipOut ipHeader[packetNum];
ipHeader[packetNum].ipVer = iph->version;

第一个定义了一个本地变量ipHeader,它是一个packetNum元素的数组。

第二行使用越界索引packetNum访问数组中的元素。

首先,为什么要将ipHeader声明为数组?其次,为什么将其定义为本地变量?第三,越界会导致未定义的行为,这会使您的整个程序格式错误并且无效。

稍后对 ipAddr 变量做同样的事情。

关于c - 将数据从 iphdr 传递到结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44561690/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com