sephiro
22-04-2003, 18:26
Salve,
sto sviluppando per motivi didattici un piccolo programmino che non fa altro che intercettare le query di una certa macchina al dns, ed inviare una risposta manipolata.
Il mio problema e' che per catturare una query e per creare una response uso questa struttura:
struct dns_header {
// Header DNS
u_int16_t id; /* query identification number */
unsigned qr: 1; /* response flag */
unsigned opcode: 4; /* purpose of message */
unsigned aa: 1; /* authoritative answer */
unsigned tc: 1; /* truncated message */
unsigned rd: 1; /* recursion desired */
unsigned ra: 1; /* recursion available */
unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */
unsigned ad: 1; /* authentic data from named */
unsigned cd: 1; /* checking disabled by resolver */
unsigned rcode: 4; /* response code */
u_int16_t qdcount; /* number of question entries */
u_int16_t ancount; /* number of answer entries */
u_int16_t nscount; /* number of authority entries */
u_int16_t arcount; /* number of resource entries */
};
struct rr {
char * rd;
char name[256];
unsigned short int type;
unsigned short int classe;
unsigned long int ttl;
unsigned short int rdlenght;
};
struct query {
char name[256];
unsigned short int type;
unsigned short int classe;
};
struct dns_packet {
struct dns_header head;
struct query question;
struct rr answer;
struct rr authoritative;
//struct rr additional;
};
purtroppo quando invio la risposta il pacchetto viene classificato come "bad packet" e quindi scartato.
Ho appurato che il problema sta nella struttura non adatta, in quanto tutto il resto funziona regolarmente.
Suggerimenti? Il linguaggio usato e' il C. :)
sto sviluppando per motivi didattici un piccolo programmino che non fa altro che intercettare le query di una certa macchina al dns, ed inviare una risposta manipolata.
Il mio problema e' che per catturare una query e per creare una response uso questa struttura:
struct dns_header {
// Header DNS
u_int16_t id; /* query identification number */
unsigned qr: 1; /* response flag */
unsigned opcode: 4; /* purpose of message */
unsigned aa: 1; /* authoritative answer */
unsigned tc: 1; /* truncated message */
unsigned rd: 1; /* recursion desired */
unsigned ra: 1; /* recursion available */
unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */
unsigned ad: 1; /* authentic data from named */
unsigned cd: 1; /* checking disabled by resolver */
unsigned rcode: 4; /* response code */
u_int16_t qdcount; /* number of question entries */
u_int16_t ancount; /* number of answer entries */
u_int16_t nscount; /* number of authority entries */
u_int16_t arcount; /* number of resource entries */
};
struct rr {
char * rd;
char name[256];
unsigned short int type;
unsigned short int classe;
unsigned long int ttl;
unsigned short int rdlenght;
};
struct query {
char name[256];
unsigned short int type;
unsigned short int classe;
};
struct dns_packet {
struct dns_header head;
struct query question;
struct rr answer;
struct rr authoritative;
//struct rr additional;
};
purtroppo quando invio la risposta il pacchetto viene classificato come "bad packet" e quindi scartato.
Ho appurato che il problema sta nella struttura non adatta, in quanto tutto il resto funziona regolarmente.
Suggerimenti? Il linguaggio usato e' il C. :)