You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

netsplit.c 5.5KB

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