home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / ib / setups / intrabld / data.z / INTRABOT.JFM < prev    next >
Text File  |  1996-12-11  |  18KB  |  638 lines

  1. //#define DEBUG
  2. /****************************************************************************\
  3. *                                                                            *
  4. * Intrabot.jfm  -- Given a range of ip addresses to check, this bot checks   *
  5. * each machine in that range to see if it has an HTTP server running.        * 
  6. * If it does, it queries the server to find out what kind of server          *
  7. * it is.                                                                     *
  8. *                                                                            *
  9. * Intrabot.jfm is part of the web utilities solution application. It is meant*
  10. * to be used by systems administrators who would like to index their site.   *
  11. * Used in conjunction with the crawler it is possible to detect which        *
  12. * machines are running an http server(using intrabot), and then what pages   *
  13. * are on those servers (using crawler). These utilities are a powerful       *
  14. * combination and should only be run by trusted users.                       *
  15. *                                                                            *
  16. *                                                                            *
  17. * Dependencies:  reqstUrl.dll                                                *
  18. *                hosts.qry                                                   *
  19. *                                                                            *
  20. *                                                                            *
  21. *                                                                            *                                                                            *
  22. * Links to:      ibapps/guest.db                                             *
  23. *                                                                            *
  24. * Updated 11/12/96 by IntraBuilder Samples Group                             *
  25. * $Revision:   1.6  $                                                        *
  26. *                                                                            *
  27. * Copyright (c) 1996, Borland International, Inc. All rights reserved.       *
  28. *                                                                            *
  29. \****************************************************************************/
  30.  
  31.  
  32. extern char* requestHead(char* /*url*/)"reqstURL.dll";
  33. extern boolean hasHTTPServer(char*/*ip address*/, unsigned int /*port*/, unsigned int /*time to wait for resonse*/)"reqstURL.dll";
  34. extern void DoMessages()"reqstURL.dll";
  35. #define mainPage 1;
  36. #define proceedPage 2;
  37. #define errorPage 3;
  38. #define helpPage 4;
  39.  
  40. // {End Header} Do not remove this comment//
  41. // Generated on 11/12/96
  42. //
  43. var f = new IntraBotForm();
  44. f.open();
  45. class IntraBotForm extends Form {
  46.    _sys.scripts.load(_sys.env.home() + "APPS\\SHARED\\CONTROLS.CC")
  47.    with (this) {
  48.       onServerSubmit = class::form_onServerSubmit;
  49.       onServerLoad = class::Form_onServerLoad;
  50.       onServerUnload = class::Form_onServerUnload;
  51.       color = "white";
  52.       height = 14;
  53.       left = 0;
  54.       top = 0;
  55.       width = 78;
  56.       title = "IntraBot Server Locator";
  57.    }
  58.  
  59.  
  60.    with (this.hosts1 = new Query()){
  61.       left = 58;
  62.       top = 5;
  63.       sql = "@hosts.qry";
  64.  
  65.       active = true;
  66.  
  67.       with (rowset) {
  68.  
  69.  
  70.       }
  71.  
  72.    }
  73.  
  74.    with (this.range1 = new Query()){
  75.       left = 58;
  76.       top = 3;
  77.       sql = "@range.qry";
  78.  
  79.       active = true;
  80.  
  81.       with (rowset) {
  82.  
  83.  
  84.       }
  85.  
  86.    }
  87.  
  88.    with (this.rule1 = new Rule(this)){
  89.       left = 76;
  90.       top = 4;
  91.       size = 2;
  92.       right = 0;
  93.       pageno = 0;
  94.  
  95.    }
  96.  
  97.    with (this.rule2 = new Rule(this)){
  98.       top = 12.5;
  99.       size = 2;
  100.       right = 76;
  101.       pageno = 0;
  102.  
  103.    }
  104.  
  105.    with (this.Low = new Text(this)){
  106.       left = 24;
  107.       top = 6;
  108.       width = 24;
  109.       value = "";
  110.  
  111.    }
  112.  
  113.    with (this.High = new Text(this)){
  114.       left = 24;
  115.       top = 7;
  116.       width = 24;
  117.       value = "";
  118.  
  119.    }
  120.  
  121.    with (this.HTML1 = new HTML(this)){
  122.       height = 1;
  123.       top = 4.5;
  124.       width = 76;
  125.       color = "black";
  126.       text = "Enter the IP addresses you would like to search between. (e.g. 123.123.123.123)";
  127.  
  128.    }
  129.  
  130.    with (this.HTML2 = new HTML(this)){
  131.       height = 1;
  132.       top = 6;
  133.       width = 23;
  134.       color = "black";
  135.       alignVertical = 1;
  136.       alignHorizontal = 2;
  137.       text = "From:";
  138.  
  139.    }
  140.  
  141.    with (this.HTML3 = new HTML(this)){
  142.       height = 1;
  143.       top = 7;
  144.       width = 23;
  145.       color = "black";
  146.       alignVertical = 1;
  147.       alignHorizontal = 2;
  148.       text = "To:";
  149.  
  150.    }
  151.  
  152.    with (this.TimeOut = new Text(this)){
  153.       left = 24;
  154.       top = 8;
  155.       width = 16;
  156.       value = "250";
  157.  
  158.    }
  159.  
  160.    with (this.HTML4 = new HTML(this)){
  161.       height = 1;
  162.       top = 8;
  163.       width = 23;
  164.       color = "black";
  165.       alignVertical = 1;
  166.       alignHorizontal = 2;
  167.       text = "Time out (milliseconds):";
  168.  
  169.    }
  170.  
  171.    with (this.HTML5 = new HTML(this)){
  172.       height = 2;
  173.       left = 12;
  174.       width = 64;
  175.       color = "804040";
  176.       text = "<U><B><H1>IntraBot</H1></B></U>";
  177.       pageno = 0;
  178.  
  179.    }
  180.  
  181.    with (this.button1 = new Button(this)){
  182.       onServerClick = class::BeginProbeButton_onServerClick;
  183.       top = 10.5;
  184.       width = 20;
  185.       text = "Begin Probe";
  186.  
  187.    }
  188.  
  189.    with (this.estimatedTimeHTML = new HTML(this)){
  190.       height = 2;
  191.       top = 5;
  192.       width = 76;
  193.       color = "black";
  194.       text = "Estimated time to complete in minutes:";
  195.       pageno = 2;
  196.  
  197.    }
  198.  
  199.    with (this.okButton = new Button(this)){
  200.       onClick = class::okButton_onClick;
  201.       top = 9;
  202.       width = 12;
  203.       text = "Launch";
  204.       pageno = 2;
  205.  
  206.    }
  207.  
  208.    with (this.backButtonPage2 = new Button(this)){
  209.       onServerClick = class::backButtonPage2_onServerClick;
  210.       left = 16;
  211.       top = 9;
  212.       width = 12;
  213.       text = "Back";
  214.       pageno = 2;
  215.  
  216.    }
  217.  
  218.    with (this.errorHTML = new HTML(this)){
  219.       height = 5;
  220.       top = 5;
  221.       width = 76;
  222.       color = "black";
  223.       text = "Error";
  224.       pageno = 3;
  225.  
  226.    }
  227.  
  228.    with (this.button2 = new Button(this)){
  229.       onServerClick = class::button2_onServerClick;
  230.       top = 13;
  231.       width = 20;
  232.       text = "     OK     ";
  233.       pageno = 3;
  234.  
  235.    }
  236.  
  237.    with (this.HTML6 = new HTML(this)){
  238.       height = 1;
  239.       top = 4.5;
  240.       width = 76;
  241.       color = "black";
  242.       text = "Enter the IP addresses you would like to search between. (e.g. 123.123.123.123)";
  243.       pageno = 4;
  244.  
  245.    }
  246.  
  247.    with (this.HTML7 = new HTML(this)){
  248.       height = 0.75;
  249.       top = 6;
  250.       width = 11;
  251.       color = "black";
  252.       alignHorizontal = 2;
  253.       text = "From:";
  254.       pageno = 4;
  255.  
  256.    }
  257.  
  258.    with (this.HTML9 = new HTML(this)){
  259.       height = 0.75;
  260.       top = 6.75;
  261.       width = 11;
  262.       color = "black";
  263.       alignHorizontal = 2;
  264.       text = "To:";
  265.       pageno = 4;
  266.  
  267.    }
  268.  
  269.    with (this.HTML10 = new HTML(this)){
  270.       height = 1;
  271.       top = 8;
  272.       width = 11;
  273.       color = "black";
  274.       alignHorizontal = 2;
  275.       text = "Time out:";
  276.       pageno = 4;
  277.  
  278.    }
  279.  
  280.    with (this.html1 = new HTML(this)){
  281.       height = 2;
  282.       left = 12;
  283.       top = 8;
  284.       width = 64;
  285.       color = "blue";
  286.       text = "This is the amount of time you want to pause at each computer. If you make this value larger you are less likely to miss a computer that has a server on it. However it will take longer to scan your network this way.";
  287.       pageno = 4;
  288.  
  289.    }
  290.  
  291.    with (this.html2 = new HTML(this)){
  292.       height = 2;
  293.       left = 12;
  294.       top = 6;
  295.       width = 64;
  296.       color = "blue";
  297.       text = "The systems administrator should know what addresses have been granted to your network. Fill in the largest and smallest here.";
  298.       pageno = 4;
  299.  
  300.    }
  301.  
  302.    with (this.helpButton = new Button(this)){
  303.       onServerClick = class::helpButton_onServerClick;
  304.       left = 24;
  305.       top = 10.5;
  306.       width = 20;
  307.       text = "       Help       ";
  308.  
  309.    }
  310.  
  311.    with (this.backButton = new Button(this)){
  312.       onServerClick = class::backButton_onServerClick;
  313.       top = 11;
  314.       width = 12;
  315.       text = " Back ";
  316.       pageno = 4;
  317.  
  318.    }
  319.  
  320.    with (this.secondsCountField = new Hidden(this)){
  321.       left = 86;
  322.       top = 3;
  323.       value = "0";
  324.       pageno = 2;
  325.  
  326.    }
  327.  
  328.    with (this.html3 = new HTML(this)){
  329.       height = 1;
  330.       top = 7;
  331.       width = 16;
  332.       color = "black";
  333.       text = "Elapsed time:";
  334.       pageno = 2;
  335.  
  336.    }
  337.  
  338.    with (this.timerText = new Text(this)){
  339.       left = 16;
  340.       top = 7;
  341.       width = 12;
  342.       value = "0:0";
  343.       pageno = 2;
  344.  
  345.    }
  346.  
  347.    with (this.image1 = new Image(this)){
  348.       height = 3.4167;
  349.       width = 10.25;
  350.       dataSource = "filename WEBSRC11.JPG";
  351.       alignment = 4;
  352.       pageno = 0;
  353.  
  354.    }
  355.  
  356.    with (this.portHTML = new HTML(this)){
  357.       height = 1;
  358.       top = 9;
  359.       width = 23;
  360.       color = "black";
  361.       alignVertical = 1;
  362.       alignHorizontal = 2;
  363.       text = "Port:";
  364.  
  365.    }
  366.  
  367.    with (this.portField = new Text(this)){
  368.       left = 24;
  369.       top = 9;
  370.       width = 16;
  371.       value = "80";
  372.  
  373.    }
  374.  
  375.    with (this.HTML11 = new HTML(this)){
  376.       height = 1;
  377.       top = 10;
  378.       width = 11;
  379.       color = "black";
  380.       alignHorizontal = 2;
  381.       text = "Port:";
  382.       pageno = 4;
  383.  
  384.    }
  385.  
  386.    with (this.portHelpHTML = new HTML(this)){
  387.       height = 1;
  388.       left = 12;
  389.       top = 10;
  390.       width = 64;
  391.       color = "blue";
  392.       text = "Specifies which port to probe (usually 80).";
  393.       pageno = 4;
  394.  
  395.    }
  396.  
  397.    with (this.html4 = new HTML(this)){
  398.       height = 1;
  399.       left = 12;
  400.       top = 2;
  401.       width = 60;
  402.       color = "black";
  403.       text = "<H3>will find web servers on the intranet</H3>";
  404.  
  405.    }
  406.  
  407.    with (this.html5 = new HTML(this)){
  408.       height = 1.2083;
  409.       left = 12;
  410.       top = 2;
  411.       width = 64;
  412.       color = "black";
  413.       text = "<H3>will find web servers on the intranet</H3>";
  414.       pageno = 4;
  415.  
  416.    }
  417.  
  418.    with (this.GeneratedHTML1 = new GeneratedHTML(this)){
  419.       height = 1;
  420.       top = 13;
  421.       width = 76;
  422.       pageno = 0;
  423.  
  424.    }
  425.    this.rowset = this.hosts1.rowset;
  426.  
  427.    function BeginProbeButton_onServerClick()
  428.    {
  429.     var ipLow=new IpAddress(form.Low.value);
  430.     var ipHigh= new IpAddress(form.High.value);
  431.     var errorString=new String();
  432.     var errors=false; 
  433.     numMachinesToCheck= (ipHigh.toDecimal()-ipLow.toDecimal())+1;
  434.     form.timerText.value="0:0";
  435.     form.hosts1.rowset.first();
  436.     //empty the tables before we start
  437.     while(!(form.hosts1.rowset.endOfSet)){
  438.      form.hosts1.rowset.delete();
  439.     }
  440.     while(!(form.range1.rowset.endOfSet)){
  441.      form.range1.rowset.delete();
  442.     }
  443.     //check for bad data in fields
  444.     errors=form.validateFields(errorString);
  445.    if (errors){
  446.      form.errorHTML.text=errorString;
  447.      form.pageno=errorPage; //turn to the error page
  448.      return;
  449.     }else{
  450.      var totalTime=numMachinesToCheck*(parseInt(form.TimeOut.value)+250)+3000;
  451.      var totalSeconds=totalTime/1000;
  452.      var minutes= Math.int(totalSeconds/60);
  453.      var seconds=0;
  454.        if (minutes>0){ 
  455.         seconds=parseInt(Math.int(totalSeconds%60));
  456.        }else{
  457.         seconds=parseInt(Math.int(totalSeconds));
  458.        }
  459.        if (seconds<10){
  460.         seconds="0"+seconds; //make 6 into 06 so it looks like a digital clock
  461.        }
  462.        var outString=new String();
  463.        outString= ""+ minutes+ ":" +seconds;
  464.        form.estimatedTimeHTML.text="Estimated time to complete probe is "+outString
  465.        form.range1.rowset.beginAppend();
  466.        form.range1.rowset.fields["low IP"].value=ipLow.text;
  467.        form.range1.rowset.fields["high IP"].value=ipHigh.text;
  468.        form.range1.rowset.save();
  469.      form.pageno=proceedPage;  //turn to the proceed with caution page
  470.      return;
  471.     }
  472.    }
  473.  
  474.    function validateFields(errorString)
  475.    {
  476.    //this function checks each field for a reasonable value
  477.    //if it finds a bad value it sets errorString to an error 
  478.    //message and returns
  479.     var errors=false;
  480.     var partsLow=new Array(4);
  481.     var partsHigh=new Array(4);
  482.     errorString="";
  483.    //Since this function is called by BeginProbeButton_onServerClick()
  484.    //we can see it's variables
  485.      if(ipLow.isValid==false){
  486.       errorString+="Error: Low IP address is not valid.<br>";
  487.       errors=true;
  488.      }
  489.      if(ipHigh.isValid==false){
  490.       errorString+="Error: High IP address is not valid.<br>";
  491.       errors=true;
  492.      }
  493.      var timeOutVal=parseInt(form.TimeOut.value);
  494.      if (timeOutVal<250){
  495.       errorString+="Error:TimeOut must be at least 250 milliseconds\n";
  496.       errors=true;
  497.      }
  498.      numMachinesToCheck= (ipHigh.toDecimal()-ipLow.toDecimal())+1;
  499.      if (numMachinesToCheck<=0){
  500.       errorString+="Error: Low IP address must be a smaller number than the high.<br>"
  501.       errors=true;
  502.      }//endif
  503.     return errors;
  504.    }
  505.  
  506.    function Form_onServerLoad()
  507.    {
  508.        _sys.scripts.load("netClass"); //load the internet classes
  509.        loadExternalFunctions();       //must call this immediately after loading internet classes.
  510.        with (this){
  511.           pageno=mainPage;
  512.           cancel=false;
  513.        }
  514.        this.submit=this.onServerSubmit;  //This is a workaround to call onServerSubmit when form.submit() is called
  515.        this.currentIP=new IpAddress("");
  516.        this.ticker=new String();
  517.        this.running=true; //keep track of when the form is running
  518.    }
  519.  
  520.    function form_onServerSubmit()
  521.    {
  522.     this.cancel=false;
  523.     this.pageno=2;
  524.     var ipLow=new IpAddress(this.Low.value);
  525.     var ipHigh= new IpAddress(this.High.value);
  526.     var ipToCheck =new IpAddress("");
  527.     var infoReturned;
  528.     var timeToWait=parseInt(this.TimeOut.value);
  529.     var result;
  530.     var numMachinesToCheck=0;
  531.     var startTime=new Date();
  532.     var min= ipLow.toDecimal();
  533.     var max= ipHigh.toDecimal();
  534.     var portNum=parseInt(form.portField.value);
  535.    #ifdef DEBUG
  536.     _sys.scriptOut.writeln("ip Low="+ipLow.text);
  537.     _sys.scriptOut.writeln("ip High="+ipHigh.text);
  538.    #endif
  539.         for(var i=min;i<=max && this.running==true;i++) {
  540.              ipToCheck.decimalToIp(i);           
  541.    #ifdef DEBUG
  542.             _sys.scriptOut.writeln("address= "+ ipToCheck.text);
  543.    #endif
  544.             var currentTime=new Date();
  545.             millisecondsEllapsed=currentTime.getTime()-startTime.getTime();
  546.             if ((millisecondsEllapsed%1000)>700) { //update the clock only 1 time per second
  547.               form.timerText.value=timeDiff(millisecondsEllapsed);
  548.             }
  549.             result= hasHTTPServer(ipToCheck.text,portNum,timeToWait);
  550.             if (result==true){
  551.                var u=new Url("http://"+ ipToCheck.text +"/");
  552.                infoReturned=new HeadResponse(u);
  553.                this.hosts1.rowset.beginAppend();
  554.                this.hosts1.rowset.fields["ip address"].value=ipToCheck.text;
  555.                this.hosts1.rowset.fields["Server name"].value=ipToCheck.getName();
  556.                this.hosts1.rowset.fields["server type"].value=infoReturned.headerFile.server;
  557.                this.hosts1.rowset.fields["port"].value=portNum;
  558.                this.hosts1.rowset.save();
  559.             }//endif
  560.          }//endfor 
  561.     _sys.reports.run("intrabot")
  562.    }
  563.  
  564.    function button2_onServerClick()
  565.    {
  566.     form.pageno=mainPage; //turn to main page
  567.    }
  568.  
  569.    function backButtonPage2_onServerClick()
  570.    {
  571.     form.pageno=mainPage; //turn to main page
  572.    }
  573.  
  574.    function helpButton_onServerClick()
  575.    {
  576.     form.pageno=helpPage; //turn to help page
  577.    }
  578.  
  579.    function backButton_onServerClick()
  580.    {
  581.     form.pageno=mainPage;  //turn to main page
  582.    }
  583.  
  584.    function Form_onServerUnload()
  585.    {
  586.      this.running=false; //keep track of when the form is running
  587.     _sys.scripts.unload("netClass.js");   //unload the scripts
  588.    }
  589.  
  590.    function okButton_onClick()
  591.    {
  592.     setTimeout("tick()",1000);
  593.     this.form.submit();
  594.    }
  595.  
  596.       function tick()
  597.       {
  598.       // {Export} This comment causes this function body to be sent to the client
  599.        var totalSeconds=parseInt(document.forms[0].secondsCountField.value) +1;
  600.        document.forms[0].secondsCountField.value = totalSeconds;
  601.        var minutes= Math.floor(totalSeconds/60);
  602.        var seconds=0;
  603.        if (minutes>0){ 
  604.         seconds=totalSeconds%60;
  605.        }else{
  606.         seconds=totalSeconds;
  607.        }
  608.        if (seconds<10){
  609.         seconds="0"+seconds; //make 6 into 06 so it looks like a digital clock
  610.        }
  611.        var outString=new String();
  612.        outString= ""+ minutes+ ":" +seconds;
  613.        document.forms[0].timerText.value=outString;
  614.        setTimeout("tick()",1000); //call this function again in 1 second  
  615.       }
  616.  
  617. }
  618.       function timeDiff( millisecondsEllapsed){
  619.              var seconds=0;
  620.              var totalSeconds=parseInt(millisecondsEllapsed/1000);
  621.              var minutes=parseInt(Math.floor(totalSeconds/60) );
  622.              var outString=new String();
  623.              if (minutes>0){ 
  624.               seconds=parseInt(totalSeconds%60);
  625.              }else{
  626.               seconds=totalSeconds;
  627.              }//endif
  628.              if (seconds<10){
  629.               seconds="0"+seconds; //make 6 into 06 so it looks like a digital clock
  630.              }//endif
  631.              outString= ""+ minutes+ ":" +seconds;
  632.              return outString;
  633.     }
  634.     function setTimeout(functionToCall,timeoutValue)
  635.     {
  636.      return;
  637.     }
  638.