nonworking read of dns reply
This commit is contained in:
parent
e1c0a595df
commit
43787fae12
21
dns.c
21
dns.c
|
@ -33,6 +33,7 @@
|
||||||
static int host2dns(const char *, char *, int);
|
static int host2dns(const char *, char *, int);
|
||||||
|
|
||||||
struct sockaddr_in peer;
|
struct sockaddr_in peer;
|
||||||
|
char topdomain[256];
|
||||||
|
|
||||||
int
|
int
|
||||||
open_dns()
|
open_dns()
|
||||||
|
@ -87,9 +88,9 @@ dns_set_peer(const char *host)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dns_ping()
|
dns_ping(int dns_fd)
|
||||||
{
|
{
|
||||||
|
dns_query(dns_fd, "kryo.se", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -128,6 +129,22 @@ dns_query(int fd, char *host, int type)
|
||||||
sendto(fd, buf, len+1, 0, (struct sockaddr*)&peer, peerlen);
|
sendto(fd, buf, len+1, 0, (struct sockaddr*)&peer, peerlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
dns_read(int fd, char *buf, int len)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
int fromlen;
|
||||||
|
struct sockaddr_in from;
|
||||||
|
|
||||||
|
r = recvfrom(fd, buf, len, 0, (struct sockaddr*)&from, &fromlen);
|
||||||
|
if (r < 0) {
|
||||||
|
perror("recvfrom");
|
||||||
|
}
|
||||||
|
printf("Read %d bytes DNS reply\n", r);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
host2dns(const char *host, char *buffer, int size)
|
host2dns(const char *host, char *buffer, int size)
|
||||||
{
|
{
|
||||||
|
|
3
dns.h
3
dns.h
|
@ -25,8 +25,9 @@ int open_dns();
|
||||||
void close_dns(int);
|
void close_dns(int);
|
||||||
|
|
||||||
void dns_set_peer(const char *);
|
void dns_set_peer(const char *);
|
||||||
void dns_ping();
|
void dns_ping(int);
|
||||||
void dns_query(int, char *, int);
|
void dns_query(int, char *, int);
|
||||||
|
int dns_read(int, char *, int);
|
||||||
|
|
||||||
|
|
||||||
#endif /* _DNS_H_ */
|
#endif /* _DNS_H_ */
|
||||||
|
|
11
dnstun.c
11
dnstun.c
|
@ -18,6 +18,8 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
|
|
||||||
#include "tun.h"
|
#include "tun.h"
|
||||||
|
@ -38,7 +40,11 @@ tunnel(int tun_fd, int dns_fd)
|
||||||
int i;
|
int i;
|
||||||
fd_set fds;
|
fd_set fds;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
char buf[1024];
|
||||||
|
int buflen;
|
||||||
|
int read;
|
||||||
|
|
||||||
|
buflen = 1024;
|
||||||
while (running) {
|
while (running) {
|
||||||
tv.tv_sec = 1;
|
tv.tv_sec = 1;
|
||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
|
@ -55,13 +61,13 @@ tunnel(int tun_fd, int dns_fd)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i == 0) {
|
if(i == 0) {
|
||||||
dns_ping();
|
dns_ping(dns_fd);
|
||||||
} else {
|
} else {
|
||||||
if(FD_ISSET(tun_fd, &fds)) {
|
if(FD_ISSET(tun_fd, &fds)) {
|
||||||
|
|
||||||
}
|
}
|
||||||
if(FD_ISSET(dns_fd, &fds)) {
|
if(FD_ISSET(dns_fd, &fds)) {
|
||||||
|
read = dns_read(dns_fd, buf, buflen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,7 +87,6 @@ main()
|
||||||
signal(SIGINT, sigint);
|
signal(SIGINT, sigint);
|
||||||
|
|
||||||
dns_set_peer("192.168.11.101");
|
dns_set_peer("192.168.11.101");
|
||||||
dns_query(dns_fd, "kryo.se", 1);
|
|
||||||
|
|
||||||
tunnel(tun_fd, dns_fd);
|
tunnel(tun_fd, dns_fd);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue