Advertisement
rhsCZ

IDP.GENERIC IPV6

Dec 8th, 2022
919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.76 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <iostream>
  3. #include <bitset>
  4. #include <string>
  5. #include <fstream>
  6. using std::cout;
  7. using std::cin;
  8. using std::fstream;
  9. using std::ios_base;
  10. using std::ios;
  11. using std::endl;
  12. using std::bitset;
  13. using std::string;
  14. //powershell (Resolve-DnsName -Name \"myip.opendns.com\" -Type A_AAAA -Server \"resolver1.opendns.com\").IPAddress
  15. //powershell (Resolve-DnsName -Name \"rhscz-pc.dynv6.net\" -Type A_AAAA).IPAddress
  16. //powershell(Invoke - WebRequest - Uri https ://ipv6.dynv6.com/api/update?zone=barunka-pc.dynv6.net\\\"&\\\"ipv6=%s/128\\\"&\\\"token=%s).Content
  17. /*struct BITS
  18. {
  19.     bool b1 : 1;
  20.     bool b2 : 1;
  21.     bool b3 : 1;
  22.     bool b4 : 1;
  23.     bool b5 : 1;
  24.     bool b6 : 1;
  25.     bool b7 : 1;
  26.     bool b8 : 1;
  27. };*/
  28. /*void encryptyfunc()
  29. {
  30.     char buffer[500] = {};
  31.     for (size_t i = 0; i < strlen(token); ++i)
  32.     {
  33.        
  34.         strcat_s(buffer,bitset<8>(token[i]).to_string().c_str());
  35.     }
  36. }*/
  37. template <typename T1,typename T2,size_t _size, size_t _size2>
  38. void decryptfunc(T1 (&input)[_size],T2 (&output)[_size2])
  39. {
  40.     char buffer[50] = {};
  41.    
  42.     for (size_t i = 0; i < strlen(input); i = i + 8)
  43.     {
  44.         ULONG l;
  45.         string str;
  46.         char bit[10] = {};
  47.         bit[0] = input[i];
  48.         bit[1] = input[i + 1];
  49.         bit[2] = input[i + 2];
  50.         bit[3] = input[i + 3];
  51.         bit[4] = input[i + 4];
  52.         bit[5] = input[i + 5];
  53.         bit[6] = input[i + 6];
  54.         bit[7] = input[i + 7];
  55.         l = bitset<10>(bit).to_ulong();
  56.         str = (char)l;
  57.         strcat_s(buffer, str.c_str());
  58.  
  59.     }
  60.     strcpy_s(output, buffer);
  61. }
  62. int main()
  63. {
  64.     HANDLE stdout_wr = 0;
  65.     HANDLE stdout_rd = 0;
  66.     DWORD read = 0;
  67.     bool success = false;
  68.     bool success2 = false;
  69.     SECURITY_ATTRIBUTES sa = {};
  70.     STARTUPINFOA si = {};
  71.     PROCESS_INFORMATION pi = {};
  72.     char outbuffer[50] = { "\0" };
  73.     char myip[50] = { "\0" };
  74.     char buffer[300] = { "\0" };
  75.     char dnsip[50] = { "\0" };
  76.     char output[50] = { "\0" };
  77.     char command[500] = { "\0" };
  78.     char token[50] = {};
  79.     char computername[100] = {};
  80.     bool errorfree = true;
  81.     char tmpfile[MAX_PATH + 1] = {};
  82.     char tmpdir[MAX_PATH + 1] = {};
  83.     GetEnvironmentVariableA("COMPUTERNAME", buffer, sizeof(buffer));
  84.     for (ULONG i = 0; i < strlen(buffer); i++)
  85.     {
  86.         computername[i] = tolower(buffer[i]);
  87.     }
  88.     memset(buffer, 0, sizeof(buffer));
  89.     GetEnvironmentVariableA("TEMP", tmpdir, MAX_PATH);
  90.     sprintf_s(tmpfile, "%s\\updateip-error.log",tmpdir);
  91.     fstream errorlog(tmpfile, fstream::out);
  92.     //encryptyfunc();
  93.     sa.nLength = sizeof(SECURITY_ATTRIBUTES);
  94.     sa.bInheritHandle = TRUE;
  95.     sa.lpSecurityDescriptor = NULL;
  96.     CreatePipe(&stdout_rd, &stdout_wr, &sa, 0);
  97.     si.cb = sizeof(STARTUPINFOA);
  98.     si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
  99.     si.wShowWindow = SW_HIDE;
  100.     si.hStdOutput = stdout_wr;
  101.     si.hStdError = stdout_wr;
  102.    
  103.  
  104.     size_t len = 0;
  105.     int ret = 0;
  106.    
  107.     //Sleep(120000);
  108.     success = CreateProcessA(0, (char*)&"powershell (Resolve-DnsName -Name \"myip.opendns.com\" -Type A_AAAA -Server \"resolver1.opendns.com\").IPAddress", NULL, NULL, TRUE, CREATE_NO_WINDOW | CREATE_SUSPENDED, NULL, NULL, &si, &pi);
  109.     if (!success)
  110.     {
  111.         errorlog << "Nelze získat IP adresu PC" << endl;
  112.         errorfree = false;
  113.         goto end;
  114.     }
  115.     CloseHandle(stdout_wr);
  116.     ResumeThread(pi.hThread);
  117.     WaitForSingleObject(pi.hProcess, INFINITE);
  118.     CloseHandle(pi.hProcess);
  119.     CloseHandle(pi.hThread);
  120.     while (1)
  121.     {
  122.         success2 = ReadFile(stdout_rd, outbuffer, sizeof(outbuffer), &read, NULL);
  123.  
  124.             if(!success2 || read == 0) break;
  125.     }
  126.     len = strlen(outbuffer);
  127.     if (outbuffer[len - 1] == *"\n" || outbuffer[len - 1] == *"\r")
  128.     {
  129.         outbuffer[len - 1] = 0;
  130.     }
  131.     if (outbuffer[len - 2] == *"\n" || outbuffer[len - 2] == *"\r")
  132.     {
  133.         outbuffer[len - 2] = 0;
  134.     }
  135.     strcpy_s(myip, outbuffer);
  136.     memset(&pi, 0, sizeof(pi));
  137.     memset(outbuffer, 0, sizeof(outbuffer));
  138.     CloseHandle(stdout_rd);
  139.     success = false;
  140.     success2 = false;
  141.     read = 0;
  142.     CreatePipe(&stdout_rd, &stdout_wr, &sa, 0);
  143.     si.hStdOutput = stdout_wr;
  144.     si.hStdError = stdout_wr;
  145.     sprintf_s(buffer, "powershell(Resolve - DnsName - Name \"%s.dynv6.net\" -Type A_AAAA).IPAddress", computername);
  146.     success = CreateProcessA(0, buffer, NULL, NULL, TRUE, CREATE_NO_WINDOW | CREATE_SUSPENDED, NULL, NULL, &si, &pi);
  147.     if (!success)
  148.     {
  149.         errorlog << "Nelze získat IP adresu z DNS serveru" << endl;
  150.         errorfree = false;
  151.         goto end;
  152.     }
  153.     memset(buffer, 0, sizeof(buffer));
  154.     CloseHandle(stdout_wr);
  155.     ResumeThread(pi.hThread);
  156.     WaitForSingleObject(pi.hProcess, INFINITE);
  157.     CloseHandle(pi.hProcess);
  158.     CloseHandle(pi.hThread);
  159.     while (1)
  160.     {
  161.         success2 = ReadFile(stdout_rd, outbuffer, sizeof(outbuffer), &read, NULL);
  162.         if (!success2 || read == 0) break;
  163.     }
  164.     len = strlen(outbuffer);
  165.     if (outbuffer[len - 1] == *"\n" || outbuffer[len - 1] == *"\r")
  166.     {
  167.         outbuffer[len - 1] = 0;
  168.     }
  169.     if (outbuffer[len - 2] == *"\n" || outbuffer[len - 2] == *"\r")
  170.     {
  171.         outbuffer[len - 2] = 0;
  172.     }
  173.     strcpy_s(dnsip, outbuffer);
  174.     memset(&pi, 0, sizeof(pi));
  175.     memset(outbuffer, 0, sizeof(outbuffer));
  176.     CloseHandle(stdout_rd);
  177.     success = false;
  178.     success2 = false;
  179.     read = 0;
  180.     //sprintf_s(buffer, "DEBUG!!\nmyip=%s\nipdns=%s", myip,dnsip);
  181.     //MessageBoxA(NULL, buffer, "DEBUG", MB_OK | MB_ICONINFORMATION);
  182.     //memset(buffer, 0, sizeof(buffer));
  183.     decryptfunc(bits, token);
  184.     sprintf_s(command, "powershell (Invoke-WebRequest -Uri https://ipv6.dynv6.com/api/update?zone=%s.dynv6.net\\\"&\\\"ipv6=%s/128\\\"&\\\"token=%s).Content",computername, myip, token);
  185.     CreatePipe(&stdout_rd, &stdout_wr, &sa, 0);
  186.     si.hStdOutput = stdout_wr;
  187.     si.hStdError = stdout_wr;
  188.     ret = strcmp(myip, dnsip);
  189.     if (ret != 0)
  190.     {
  191.         success = CreateProcessA(0, command, NULL, NULL, TRUE, CREATE_NO_WINDOW | CREATE_SUSPENDED, NULL, NULL, &si, &pi);
  192.         if (!success)
  193.         {
  194.             errorlog << "Nelze Poslat GET Request pro změnu IP adresy u DDNS poskytovatele" << endl;
  195.             errorfree = false;
  196.             goto end;
  197.         }
  198.         CloseHandle(stdout_wr);
  199.         ResumeThread(pi.hThread);
  200.         WaitForSingleObject(pi.hProcess, INFINITE);
  201.         CloseHandle(pi.hProcess);
  202.         CloseHandle(pi.hThread);
  203.         while (1)
  204.         {
  205.             success2 = ReadFile(stdout_rd, outbuffer, sizeof(outbuffer), &read, NULL);
  206.             if (!success2 || read == 0) break;
  207.         }
  208.         CloseHandle(stdout_rd);
  209.         len = strlen(outbuffer);
  210.         if (outbuffer[len - 1] == *"\n" || outbuffer[len - 1] == *"\r")
  211.         {
  212.             outbuffer[len - 1] = 0;
  213.         }
  214.         if (outbuffer[len - 2] == *"\n" || outbuffer[len - 2] == *"\r")
  215.         {
  216.             outbuffer[len - 2] = 0;
  217.         }
  218.         strcpy_s(output, outbuffer);
  219.         memset(&pi, 0, sizeof(pi));
  220.         memset(outbuffer, 0, sizeof(outbuffer));
  221.         success = false;
  222.         success2 = false;
  223.         read = 0;
  224.         if (strcmp(output, "addresses updated") != 0)
  225.         {
  226.             sprintf_s(buffer, "Nelze updatovat IP addressu u poskytovatele\n server vrátil=\" %s \"", output);
  227.             errorlog << buffer << endl;
  228.             errorfree = false;
  229.             memset(buffer, 0, sizeof(buffer));
  230.         }
  231.     }
  232. end:
  233.     CloseHandle(stdout_rd);
  234.     CloseHandle(stdout_wr);
  235.     CloseHandle(pi.hProcess);
  236.     CloseHandle(pi.hThread);
  237.     errorlog.close();
  238.     if (errorfree)
  239.     {
  240.         return 0;
  241.     }
  242.     else
  243.     {
  244.         return -1;
  245.     }
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement