mirror of
https://github.com/yarrick/iodine.git
synced 2024-11-29 16:36:03 +03:00
cleanup and stuff
This commit is contained in:
parent
b91fb102d3
commit
34b8ee6794
12
dns.c
12
dns.c
@ -288,17 +288,14 @@ dns_write(int fd, int id, char *buf, int len)
|
|||||||
int
|
int
|
||||||
dns_read(int fd, char *buf, int buflen)
|
dns_read(int fd, char *buf, int buflen)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
int r;
|
int r;
|
||||||
long ttl;
|
long ttl;
|
||||||
short rlen;
|
short rlen;
|
||||||
short type;
|
short type;
|
||||||
short class;
|
short class;
|
||||||
short port;
|
|
||||||
short ancount;
|
short ancount;
|
||||||
char *data;
|
char *data;
|
||||||
char name[255];
|
char name[255];
|
||||||
char host[255];
|
|
||||||
char rdata[256];
|
char rdata[256];
|
||||||
HEADER *header;
|
HEADER *header;
|
||||||
char packet[64*1024];
|
char packet[64*1024];
|
||||||
@ -319,17 +316,13 @@ dns_read(int fd, char *buf, int buflen)
|
|||||||
|
|
||||||
rlen = 0;
|
rlen = 0;
|
||||||
|
|
||||||
for(i=0;i<ancount;i++) {
|
if(ancount == 1) {
|
||||||
READNAME(packet, name, data);
|
READNAME(packet, name, data);
|
||||||
READSHORT(type, data);
|
READSHORT(type, data);
|
||||||
READSHORT(class, data);
|
READSHORT(class, data);
|
||||||
READLONG(ttl, data);
|
READLONG(ttl, data);
|
||||||
READSHORT(rlen, data);
|
READSHORT(rlen, data);
|
||||||
READDATA(rdata, data, rlen);
|
READDATA(rdata, data, rlen);
|
||||||
|
|
||||||
if(type == T_NULL) {
|
|
||||||
memcpy(buf, rdata, rlen);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (dns_sending() && chunkid == ntohs(header->id)) {
|
if (dns_sending() && chunkid == ntohs(header->id)) {
|
||||||
// Got ACK on sent packet
|
// Got ACK on sent packet
|
||||||
@ -346,6 +339,9 @@ dns_read(int fd, char *buf, int buflen)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(ttl == T_NULL && rlen)
|
||||||
|
memcpy(buf, rdata, rlen);
|
||||||
|
|
||||||
// TODO is any data attached? find out and copy into buf and return length
|
// TODO is any data attached? find out and copy into buf and return length
|
||||||
return rlen;
|
return rlen;
|
||||||
}
|
}
|
||||||
|
1
dnsd.c
1
dnsd.c
@ -215,6 +215,7 @@ dnsd_respond(int fd, short id, struct sockaddr_in from)
|
|||||||
p += outbuflen;
|
p += outbuflen;
|
||||||
|
|
||||||
len = p - buf;
|
len = p - buf;
|
||||||
|
printf("Responding with %d\n", len);
|
||||||
sendto(fd, buf, len, 0, (struct sockaddr*)&from, sizeof(from));
|
sendto(fd, buf, len, 0, (struct sockaddr*)&from, sizeof(from));
|
||||||
|
|
||||||
outbuflen = 0;
|
outbuflen = 0;
|
||||||
|
7
dnstun.c
7
dnstun.c
@ -88,8 +88,11 @@ tunnel(int tun_fd, int dns_fd)
|
|||||||
if (read > 0) {
|
if (read > 0) {
|
||||||
printf("Got data on dns! %d bytes\n", read);
|
printf("Got data on dns! %d bytes\n", read);
|
||||||
|
|
||||||
//frame->flags = htons(0x0000);
|
#ifdef LINUX
|
||||||
//frame->proto = htons(0x0200);
|
frame->proto = htons(0x0800);
|
||||||
|
#else
|
||||||
|
frame->proto = htons(0x0002);
|
||||||
|
#endif
|
||||||
|
|
||||||
write_tun(tun_fd, frame, read + 4);
|
write_tun(tun_fd, frame, read + 4);
|
||||||
}
|
}
|
||||||
|
13
dnstund.c
13
dnstund.c
@ -57,8 +57,10 @@ tunnel(int tun_fd, int dns_fd)
|
|||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
|
|
||||||
FD_ZERO(&fds);
|
FD_ZERO(&fds);
|
||||||
if(!dnsd_haspacket())
|
if(!dnsd_haspacket()) {
|
||||||
|
printf("There is room for more\n");
|
||||||
FD_SET(tun_fd, &fds);
|
FD_SET(tun_fd, &fds);
|
||||||
|
}
|
||||||
FD_SET(dns_fd, &fds);
|
FD_SET(dns_fd, &fds);
|
||||||
|
|
||||||
i = select(MAX(tun_fd, dns_fd) + 1, &fds, NULL, NULL, &tv);
|
i = select(MAX(tun_fd, dns_fd) + 1, &fds, NULL, NULL, &tv);
|
||||||
@ -72,15 +74,22 @@ tunnel(int tun_fd, int dns_fd)
|
|||||||
|
|
||||||
if(i != 0) {
|
if(i != 0) {
|
||||||
if(FD_ISSET(tun_fd, &fds)) {
|
if(FD_ISSET(tun_fd, &fds)) {
|
||||||
|
printf("data on tun\n");
|
||||||
read = read_tun(tun_fd, frame, 64*1024);
|
read = read_tun(tun_fd, frame, 64*1024);
|
||||||
if(read > 0)
|
if(read > 0) {
|
||||||
|
printf("Sending response\n");
|
||||||
dnsd_queuepacket(frame->data, read - 4);
|
dnsd_queuepacket(frame->data, read - 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(FD_ISSET(dns_fd, &fds)) {
|
if(FD_ISSET(dns_fd, &fds)) {
|
||||||
read = dnsd_read(dns_fd, frame->data, 64*1024-4);
|
read = dnsd_read(dns_fd, frame->data, 64*1024-4);
|
||||||
if(read > 0) {
|
if(read > 0) {
|
||||||
frame->flags = htons(0x0000);
|
frame->flags = htons(0x0000);
|
||||||
|
#ifdef LINUX
|
||||||
frame->proto = htons(0x0800);
|
frame->proto = htons(0x0800);
|
||||||
|
#else
|
||||||
|
frame->proto = htons(0x0002);
|
||||||
|
#endif
|
||||||
write_tun(tun_fd, frame, read + 4);
|
write_tun(tun_fd, frame, read + 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user