1

Тема: HTA: DNS Toolz

Графическая оболочка для nslookup, для удобной работы с DNS.

<HTML><HEAD>
<TITLE>DNS Toolz (null)</TITLE>
<META content=JavaScript name=vs_defaultClientScript>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">

<hta:application id="DNS Toolz"
  applicationname="DNS Toolz"
  border="thick"
  borderstyle="normal"
  caption="yes"
  contextmenu="yes"
  innerborder="yes"
  maximizebutton="yes"
  minimizebutton="yes"
  navigable="no"
  scroll="auto"
  scrollflat="no"
  selection="no"
  showintaskbar="yes"
  singleinstance="yes"
  sysmenu="yes"
  version="1.0"
  windowstate="normal"
/>
<style type="text/css">
  body { margin:0; background:#eee }
  body * { font:9pt/11pt Verdana; color:#005 }
  td { background:#eee; padding:0.1em; text-indent:0.1em }
  td.number { width:2.5em; text-align:center; text-indent:0 }
  td.date { width:5.5em; text-align:center; text-indent:0 }
  
  
  body { font-family: verdana, sans-serif; font-size:13px; }
  a.help { text-decoration:none;}
  a.help span { display:none;}
  a.help:hover { position:relative; }
  a.help:hover span { position:absolute; display:block; left:10px; top:-15px;
  border:solid 1px #000; background:#ddd; color:#000; white-space:pre; padding:1px;}

</style>

<SCRIPT language=javascript>
  <!-- скрыть скрипт от браузеров не поддерживающих их
  var WshShell = new ActiveXObject("WScript.Shell");
  
  function resize()    // изменение размера окна к приемлемому виду
  {
    window.window.resizeTo(900,500);
  }
  function Run(CommandString)  // запуск программ
  {
    WshShell.Run(CommandString,1);  
  }
  
  function CheckDnsQuery() // функция проверки правильности введенных данных, 
  //возращает 1 - если всё правильно, 0 - если есть ошибки, 2 - если задан dns сервер 
  {
      if (DnsRecord.value == "") 
        {
          alert ("Введите имя домена или IP адрес, информацию о котором вы хотите получить");
          return 0;
        }
      if (DnsServerName.value != "")
      {
        if (DnsServerName.value == " ")
        {
          alert ("Вы ввели в качестве имени сервера пустое значение");
          return 0;
        }
        else
        {
          return 2; // возращаем 2 если задано имя dns сервера 
        }
      }
      if (DnsServerName.value == "")
      {
        return 1;
      }
    }
    
  function Get()
  {
    switch(action.value)
    {
      case "Record":
           DnsQuery();
           break;
      case "Zone":
           DnsQueryZone();
           break;
    }
  }
  
  function DnsQuery()  // dns запрос
  {
    check = CheckDnsQuery();
    if ( (check == 1) | (check ==2)) // проверяем данные введенные в поля для ввода адреса и сервера 
    {
      WshExec  = WshShell.Exec("nslookup.exe");
      if (check == 2)                        //если был задан dns сервер то используем его
      {
        WshExec.StdIn.WriteLine ("server "+DnsServerName.value);  
      }
      //dsgjkyztv запрос
      WshExec.StdIn.WriteLine ("set q="+DnsType.value);
      WshExec.StdIn.WriteLine (DnsRecord.value);
      WshExec.StdIn.WriteLine("exit");
      NsLookupResult="";
      NsLookupResult = WshExec.StdOut.ReadAll();
      NsLookupResult = NsLookupResult+WshExec.StdErr.ReadAll();
      //записываем полученные данные в текстовое поле
      resultat.innerText="";
      resultat.innerText=NsLookupResult;
      WshExec.Terminate();
    }
        
  }  
  
  function DiapazonIP()  //функция для сканирования диапазона ип адресов
  {
    var WshExec;
    var NsLookupResult="";
    var DnsResult="";
    resultat.innerText=""; 
    var increment=1;
    var code=event.keyCode;
    
    for (i=parseInt(BeginIP3.value);i<=parseInt(EndIP3.value);i++)
    {      
      WshExec  = WshShell.Exec("nslookup.exe");
      WshExec.StdIn.WriteLine ("set q=a");
      for(j=parseInt(BeginIP4.value);j<=parseInt(EndIP4.value);j++)
      {
        ip=BeginIP1.value+"."+BeginIP2.value+"."+i+"."+j
        WshExec.StdIn.WriteLine (ip);
        if(code==27){break;}
        Check=increment*30; // 30 - это коэффициент ! если у вас зависает окно консольное значит нужно уменьшить число(коээфициент это сколько запросов будет записано в окно. Если слишком много записать в одно окно то по ходу дела у StdOut не хватает буфера для данных и консольнок окошко зависает
        if(j>=Check)
        {
          //alert("if begin j="+j+" increment="+increment+"i= " +i);
          increment++;
          WshExec.StdIn.WriteLine("exit");
          WshExec.StdErr.ReadAll();
          while (!WshExec.StdOut.AtEndOfStream)
          {
            NsLookupResult=WshExec.StdOut.ReadLine();
            if (NsLookupResult.substr(0,4) == "Name")
            {
            DnsResult=DnsResult+NsLookupResult+"\n";
            NsLookupResult=WshExec.StdOut.ReadLine();
            DnsResult=DnsResult+NsLookupResult+"\n\n";
            }
          }
          try {WshExec.Terminate();} catch(err) {alert("Ошибка завершения nslookup!\nНомер ошибки "+ err.number+"\nОписание ошибки - "+err.description )};
          WshExec  = WshShell.Exec("nslookup.exe");
        }
        else
        {
          if (EndIP4.value - Check < 0)
          {
            j++;
            while(j<EndIP4.value)
            {
              ip=BeginIP1.value+"."+BeginIP2.value+"."+i+"."+j
              WshExec.StdIn.WriteLine (ip);
              j++;
            }
            WshExec.StdIn.WriteLine("exit");
            WshExec.StdErr.ReadAll();
            while (!WshExec.StdOut.AtEndOfStream)
            {
              NsLookupResult=WshExec.StdOut.ReadLine();
              if (NsLookupResult.substr(0,4) == "Name")
              {
                DnsResult=DnsResult+NsLookupResult+"\n";
                NsLookupResult=WshExec.StdOut.ReadLine();
                DnsResult=DnsResult+NsLookupResult+"\n\n";
              }
            }
          increment=1; // перед переходом на новый цикл скидываем переменную
          try {WshExec.Terminate();} catch(err) {alert("Ошибка завершения nslookup!\nНомер ошибки "+ err.number+"\nОписание ошибки - "+err.description )};
          }
        }
      }
    }
    try {WshExec.Terminate();} catch(err) {alert("Ошибка завершения nslookup!\nНомер ошибки "+ err.number+"\nОписание ошибки - "+err.description )};
    resultat.innerText=resultat.innerText+DnsResult;
    alert("enjoy :)");
  }
  function DnsQueryZone()
  {
    var arrNS= new Array();
    var check = CheckDnsQuery();
    var NsLookupResult="";
    var NsServers="\nОпрошенные сервера имён:"
    if ( check == 1)
    {
      WshExec  = WshShell.Exec("nslookup.exe");
      
      WshExec.StdIn.WriteLine ("set q=ns");
      WshExec.StdIn.WriteLine(DnsRecord.value);
      WshExec.StdIn.WriteLine("exit");
      // в цикле получаем массив ns серверов 
      i=0;
      while (!WshExec.StdOut.AtEndOfStream)
      {
        NsLookupResult=WshExec.StdOut.ReadLine();
        result=NsLookupResult.indexOf("internet address =");
        if(result != -1 )
        {
          arrNS[i]=NsLookupResult.substring(result+18); // получаем имя ns сервера
          NsServers=NsServers+"\n"+arrNS[i];
          i++;
        }
      }
      
      for(i=0;i<arrNS.length;i++)
      {
        WshExec  = WshShell.Exec("nslookup.exe");
        WshExec.StdIn.WriteLine ("server "+arrNS[i]);
        WshExec.StdIn.WriteLine ("ls -t "+DnsType.value+" "+DnsRecord.value);
        WshExec.StdIn.WriteLine("exit"); 
        NsLookupResult=WshExec.StdOut.ReadAll();
        NsLookupResultErr = WshExec.StdErr.ReadAll();
        if (NsLookupResultErr == "")
        {
          resultat.innerText="";
          resultat.innerText=NsLookupResult;
          break;
        }
      }
      if (NsLookupResultErr != "")
      {
        resultat.innerText="";
        resultat.innerText="Не удалось получить DNS зону домена "+DnsRecord.value+" "+NsServers;
      }
    }
  }
  
  function IPCheck()
  {
   flag=0;
   if ((BeginIP1.value>255))
   {
     BeginIP1.value="";
     BeginIP1.focus();
     alert ("Недоустимая часть IP адреса! Число не должно быть больше 255");
   }
   if ((BeginIP2.value>255))
   {
     BeginIP2.value="";
     BeginIP2.focus();
     alert ("Недоустимая часть IP адреса! Число не должно быть больше 255");
   }
   if ((BeginIP3.value>255))
   {
     BeginIP3.value="";
     BeginIP3.focus();
     alert ("Недоустимая часть IP адреса! Число не должно быть больше 255");
   }
   if ((BeginIP4.value>255))
   {
     BeginIP4.value="";
     BeginIP4.focus();
     alert ("Недоустимая часть IP адреса! Число не должно быть больше 255");
   }
   if ((EndIP3.value>255))
   {
     EndIP3.value="";
     EndIP3.focus();
     alert ("Недоустимая часть IP адреса! Число не должно быть больше 255");
   }
   if ((EndIP4.value>255))
   {
     EndIP4.value="";
     EndIP4.focus();
     alert ("Недоустимая часть IP адреса! Число не должно быть больше 255");
   }
 } 
  
  function keyDown()
  {
    var code=event.keyCode;
    switch(code) 
    {
      case 112:
           alert("DNS TOOLZ");
           break;
    }
  }
  
  -->
</SCRIPT>
</HEAD>
<BODY bgColor=silver onload='resize()' onkeydown="keyDown()">
<h1 align=center> DNS toolz <hr width="95%"> </h1>

<TABLE width="100%" align=center border=0>                                <!-- главная таблица -->
  <TR>
    <TD valign=top>
      <table align=center border=0 width="95%">
        <tr>
          <td align=middle valign=top>
          <table align=center border=0>
            <tr>
              <td align=left>Получить</td>
              <td align=left>
              <select id='action' name='action'> 
              <option value='Record' selected>DNS запись </option>
              <option value='Zone'>DNS Зону</option>
              </select>
              </td>
            </tr>
            <tr>
              <td align=left>Тип записи</td>
              <td align=left>
              <select id=DnsType> 
              <option value='ANY' selected>  ANY(Все типы)</option>
              <option value='A'>    A (IP-адрес)   </option>
              <option value='NS'>   NS (Сервер имен)     </option>
              <option value='MX'>   MX (Почт.обменник)    </option>
              <option value='MB'>   MB(Имя домена П.Я)       </option>
              <option value='MG'>   MG (Член почт. гр.)    </option>
              <option value='MINFO'>MINFO (инф. о П.Я)        </option>
              <option value='MR'>   MR(MailRename)  </option>
              <option value='PTR'>  PTR (Pointer)             </option> 
              <option value='SOA'>  SOA (Нач. запись)    </option> 
              <option value='CNAME'>CNAME (Канон. имя)      </option> 
              <option value='TXT'>  TXT (текст-я инф-я)     </option> 
              <option value='HINFO'>HINFO (Проц и ОС)    </option> 
              <option value='GID'>  GID (ИД группы) </option> 
              <option value='UID'>  UID (ИД юзера) </option> 
              <option value='UINFO'>UINFO (Юзер инфо) </option> 
              <option value='WKS'>  WKS (Службы сети) </option> 
              </select>
              </td>
            </tr>
            <tr>
              <td align=left>Имя или IP </td>
              <td align=left><input type=text id=DnsRecord size=23 maxlength=100></td>
            </tr>
            <tr>
              <td align=left><a href="#" class="help">DNS Сервер<span> Укажите Dns сервер с которым вы собираетесь работать, если не хотите использовать ваш dns сервер</span></a></td>
              <td align=left><input type=text id=DnsServerName size=23></td>
            </tr>
            <tr>
            <td></td>
            <td><INPUT id=GetButton onclick=Get() type=button value=выполнить name=DnsQueryButton> </td>
            
            </tr>
            
            <tr>
              
              <td align=middle colspan=2><hr>Сканировать Диапазон IP</td>
            </tr>
            <tr>
              <td align=left>Начальный IP</td>
              <td align=right><input type=text id='BeginIP1' size=3 maxlength=3 value=212 onblur='IPCheck()'><input type=text id=BeginIP2 size=3 maxlength=3 onblur='IPCheck()' value=176><input type=text id=BeginIP3 onblur='IPCheck()' size=3 maxlength=3  value=53><input type=text id=BeginIP4 size=3 maxlength=3 onblur='IPCheck()' value=1></td>
            </tr>
            <tr>
              <td align=left>Конечный IP</td>
              <td align=right><input type=text id=EndIP3 size=3 maxlength=3 onblur='IPCheck()' value=53><input type=text id=EndIP4 size=3 maxlength=3 onblur='IPCheck()' value=3></td>
            </tr>
            <tr>
            <td></td>
            <td><INPUT id=Button1 onclick=DiapazonIP() type=button value=выполнить name=DiapazonIPButton> </td>
            </tr>
            <tr><td colspan=2 height=70 valign=top><hr width="95%"></td></tr>
            
            <tr><td colspan=2 align=middle><input type=button value='NsLookup(справка)' onclick='Run("hh ntcmds.chm::/nslookup__subcommands.htm")'></td></tr>
      </table>
    </td>
    
    <TD> <center><textarea id=resultat name=resultat rows=25 cols=95></textarea> </center></TD></tr></table></TD></TR></TABLE>

</BODY>
</HTML>
Йоды магистра речи тайна раскрыта: оказывается, на форте программист старый есть он просто!