Possible Duplicate:
C - byte array to structure (dns query)Ç - DNS查询来构建
我有这些结构:
typedef struct dnsQuery {
char header[12];
struct dnsQuerySection *querySection;
} TdnsQuery;
typedef struct dnsQuerySection {
unsigned char *name;
struct dnsQueryQuestion *question;
} TdnsQuerySection;
typedef struct dnsQueryQuestion {
unsigned short qtype;
unsigned short qclass;
} TdnsQueryQuestion;
我有从recvfrom
字节数组buf
的DNS查询。我想从字节数组像这样得到的结构:
TdnsQuery* dnsQuery = (TdnsQuery*)buf;
当我试图访问QTYPE是这样的:
printf("%u", dnsQuery->querySection->question.qtype);
我得到赛格故障11
谁能帮我这些结构?他们怎么了?我试图添加结构:
typedef struct udpPacket {
char header[8];
structr dnsQuery query;
}
并将此结构映射到字节数组,但它没有帮助。有人可以帮助我建立这些结构吗?他们应该如何使用UDP协议进行DNS查询?
编辑:我的结构,现在看起来是这样的:
typedef struct {
unsigned short qtype;
unsigned short qclass;
} dnsQueryQuestion;
typedef struct {
dnsQueryQuestion *question;
unsigned char *data[0];
} dnsQuerySection;
typedef struct {
char header[12];
dnsQuerySection querySection[0];
} dnsQuery;
typedef struct udpPacket {
char header[8];
dnsQuery query[0];
} TudpPacket;
我加解析功能:
void parse(unsigned char *data, unsigned short *qtype, unsigned short *qclass) {
int i = 0;
while (data[i]) {
int len = data[i];
i += len + 1;
}
*qtype = (unsigned short) data[i+1];
*qclass = (unsigned short) data[i+3];
return;
}
,并试图解析:
TudpPacket udpPack = (TudpPacket)buf;
parse(udpPack.query.querySection.data, &(udpPack.query.querySection.question.qtype), &(udpPack.query.querySection.question.qclass));
printf("%u\n", udpPack.query.querySection.question.qtype);
什么是'buf'?它从何而来?它真的指向你的结构的一个实例吗? – Mat
Buf是来自'recvfrom'的字节数组。 –
'struct dnsQuerySection * querySection;'< - 您不会从'recvfrom'获得有效的指针。它不分配内存,将相关数据复制到那里并将指针存储在结构中。如果您接收到的消息包含_pointer_值,那么这些值对您没有用处,因为他们会说出原始系统上的内容。 –