Browse Source

Netsplit functionality in-progress

MissValeska 9 years ago
parent
commit
c5cfe42811
1 changed files with 197 additions and 0 deletions
  1. 197
    0
      src/netsplit.c

+ 197
- 0
src/netsplit.c View File

@@ -0,0 +1,197 @@
1
+#include <stdio.h>
2
+#include <stdlib.h>
3
+#include <string.h>
4
+#include <arpa/inet.h>
5
+#include <dirent.h>
6
+#include "getaddrinfodnstest.c"
7
+
8
+int isValidIpv6Address(char *ipAddress)
9
+{
10
+    struct sockaddr_in6 sa;
11
+    int result = inet_pton(AF_INET6, ipAddress, &(sa.sin6_addr));
12
+    return result;
13
+}
14
+
15
+int isValidIpv4Address(char *ipAddress)
16
+{
17
+    struct sockaddr_in sa;
18
+    int result = inet_pton(AF_INET, ipAddress, &(sa.sin_addr));
19
+    if(result == 0) {
20
+        if(isValidIpv6Address(ipAddress) == 1)
21
+            return 11;
22
+        else
23
+            return 0;
24
+    }
25
+    return result;
26
+}
27
+
28
+/* Forwards packets to this IP through the inet 
29
+ * iptables forwarding rule. */
30
+void inetipForwarding(char *ipAddress, int family) {
31
+    return;
32
+}
33
+
34
+/* Forwards packets to this IP through the ntk 
35
+ * iptables forwarding rule. */
36
+void ntkipForwarding(char *ipAddress, int family) {
37
+    return;
38
+}
39
+
40
+/* Resolves the ntk domain name in ANDNA, 
41
+ * Forwarding the originally desired packets
42
+ * through the ntk iptables forwarding rule. */
43
+void ntkDNSResolution(char *domain) {
44
+    return;
45
+}
46
+
47
+/* Resolves the inet domain name via the commented out name servers
48
+ * in /etc/resolv.conf, Forwarding the dns query packets
49
+ * through the inet iptables forwarding rule.
50
+ * Then, Forwards the originally desired packets
51
+ * through the inet iptables forwarding rule. */
52
+void inetDNSResolution(char *domain) {
53
+    printf("Inet Domain name %s resolves to:\n", domain);
54
+    getaddrinfodnsresolution(domain);
55
+    return;
56
+}
57
+
58
+void inet_mode(char *domain) {
59
+    
60
+    printf("inet_mode: %s\n", domain);
61
+    
62
+    char *ret;
63
+    char *ret1;
64
+    char new_domain[MAXNAMLEN];
65
+    int rt_value;
66
+    
67
+    strcpy(new_domain, domain);
68
+    
69
+    ret = strstr(new_domain, ".ntk");
70
+    
71
+    if(ret != NULL) {
72
+        printf("inet_mode .ntk\n");
73
+        goto inet_mode_ntk_rslv;
74
+    }
75
+    
76
+    ret = strstr(new_domain, ".inet");
77
+    ret1 = strstr(new_domain, ".inet");
78
+    
79
+    if(ret1 != NULL) {
80
+        new_domain[strlen(new_domain)-6] = '\0';
81
+        printf("inet_mode abbrevate: %s\n", new_domain);
82
+    }
83
+    
84
+    if(ret == NULL || ret1 != NULL) {
85
+        rt_value = isValidIpv4Address(new_domain);
86
+        if(rt_value == 1)
87
+            inetipForwarding(new_domain, AF_INET);
88
+        if(rt_value == 11)
89
+            inetipForwarding(new_domain, AF_INET6);
90
+        if(rt_value == 0)
91
+           inetDNSResolution(new_domain);
92
+        printf("inet_mode normal\n");
93
+    }
94
+    
95
+    ret = strstr(new_domain, ".ntk");
96
+    
97
+    if(ret != NULL) {
98
+        new_domain[strlen(new_domain)-5] = '\0';
99
+        inet_mode_ntk_rslv:
100
+        rt_value = isValidIpv4Address(new_domain);
101
+        if(rt_value == 1)
102
+            ntkipForwarding(new_domain, AF_INET);
103
+        if(rt_value == 11)
104
+            ntkipForwarding(new_domain, AF_INET6);
105
+        if(rt_value == 0)
106
+           ntkDNSResolution(new_domain);
107
+        printf("inet_mode abnormal\n");
108
+    }
109
+    
110
+}
111
+
112
+void ntk_mode(char *domain) {
113
+    
114
+    char new_domain[MAXNAMLEN];
115
+    int rt_value;
116
+    
117
+    strcpy(new_domain, domain);
118
+    
119
+    if(strstr(domain, ".inet") == NULL)
120
+        goto ntk_mode_inet_rslv;
121
+    
122
+    if(strstr(domain, ".ntk") == NULL || strstr(domain, ".ntk") != NULL) {
123
+        rt_value = isValidIpv4Address(domain);
124
+        if(rt_value == 1)
125
+            ntkipForwarding(domain, AF_INET);
126
+        if(rt_value == 11)
127
+            ntkipForwarding(domain, AF_INET6);
128
+        if(rt_value == 0)
129
+           ntkDNSResolution(domain);
130
+    }
131
+    
132
+    if(strstr(domain, ".inet") != NULL) {
133
+        ntk_mode_inet_rslv:
134
+        rt_value = isValidIpv4Address(domain);
135
+        if(rt_value == 1)
136
+            inetipForwarding(domain, AF_INET);
137
+        if(rt_value == 11)
138
+            inetipForwarding(domain, AF_INET6);
139
+        if(rt_value == 0)
140
+           inetDNSResolution(domain);
141
+    }
142
+    
143
+}
144
+
145
+void domain_ip_processing(char *domain) {    
146
+    char *ret;
147
+    char new_domain[MAXNAMLEN];
148
+    int rt_value;
149
+    int i;
150
+    ret = strstr(domain, ".inet");
151
+    strcpy(new_domain, domain);
152
+    if(ret != NULL) {
153
+        new_domain[strlen(new_domain)-6] = '\0';
154
+        rt_value = isValidIpv4Address(new_domain);
155
+        if(rt_value == 1)
156
+            inetipForwarding(new_domain, AF_INET);
157
+        if(rt_value == 11)
158
+            inetipForwarding(new_domain, AF_INET6);
159
+        if(rt_value == 0)
160
+           inetDNSResolution(new_domain);
161
+        
162
+        printf("This domain/ip address is an inet domain/ip address. %d\n", rt_value);
163
+        
164
+    }
165
+    
166
+    ret = strstr(domain, ".ntk");
167
+    if(ret != NULL) {
168
+	new_domain[strlen(new_domain)-5] = '\0';
169
+        rt_value = isValidIpv4Address(new_domain);
170
+        if(rt_value == 1)
171
+            ntkipForwarding(new_domain, AF_INET);
172
+        if(rt_value == 11)
173
+            ntkipForwarding(new_domain, AF_INET6);
174
+        if(rt_value == 0)
175
+           ntkDNSResolution(new_domain);
176
+        
177
+        printf("This domain/ip address is an ntk domain/ip address. %d\n", rt_value);
178
+    }
179
+    
180
+    printf("Domain/IP: %s %s\n", new_domain, domain);
181
+    
182
+}
183
+
184
+int main(void) {
185
+    for (;;) {
186
+        char *request = (char *)malloc(100);
187
+	printf("\n> ");
188
+	fgets(request, 100, stdin);
189
+        if(strcmp(request, "quit\n") == 0 || strcmp(request, "exit\n") == 0)
190
+            exit(0);
191
+	fflush(stdin);
192
+	inet_mode(request);
193
+	free(request);
194
+	}
195
+    
196
+    return 0;
197
+}

Loading…
Cancel
Save