whois.handle: SIS-80-10-10-13
whois.name: AT&T Enterprises, LLC
whois.cidrs: 107.128.0.0/12
whois.created: 2013-10-23T00:00:00.000000
whois.updated: 2024-12-05T00:00:00.000000
whois.allocation_type: ALLOCATION
whois.handle: AEL-360
whois.name: AT&T Enterprises, LLC
whois.street: 208 S. Akard St.
whois.city: Dallas
whois.state: TX
whois.postal_code: 75202
whois.country: US
whois.handle: ABUSE7-ARIN
whois.name: abuse
whois.email: abuse@att.net
whois.handle: ZS44-ARIN
whois.name: IPAdmin-ATT Internet Services
whois.email: ipadmin@att.com
whois.handle: ICC-ARIN
whois.name: IP Team
whois.email: rm-ipspecialist@att.com
whois.handle: ZS44-ARIN
whois.name: IPAdmin-ATT Internet Services
whois.email: ipadmin@att.com
services.protocol: HIKVISION
services.transport_protocol: TCP
services.scan_time: 2025-07-28T01:00:23.738639
services.value: camera
services.web_version: V4.0.1build191120
services.plugin_version: V3.0.7.21
services.name: win32
services.name: npWebVideoPlugin.dll
services.version: 3.0.7.21
services.name: WebVideoActiveX.ocx
services.version: 3.0.7.21
services.name: PlayCtrl.dll
services.version: 7.3.7.39
services.name: StreamTransClient.dll
services.version: 1.1.3.17
services.name: SystemTransform.dll
services.version: 2.5.3.13
services.name: NetStream.dll
services.version: 1.0.5.57
services.name: AudioIntercom.dll
services.version: 1.4.0.8
services.name: localServiceControl
services.version: 1.0.0.8
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-28T06:08:13.644153
services.banner: HTTP/1.1 200 OK
  Date:  <REDACTED>
  Last-Modified: Thu, 07 Nov 2024 02:58:30 GMT
  Etag: "672c2cd6.17577"
  Content-Type: text/html
  Content-Length: 17577
  Connection: close
  Accept-Ranges: bytes
  
services.version_selected: TLSv1_2
services.cipher_selected: TLS_RSA_WITH_AES_128_GCM_SHA256
services.ja4s: t120200_009c_2412b79bd618
services.version: TLSv1_2
services.ja4s: t120200_009c_2412b79bd618
services.version: TLSv1_1
services.ja4s: t110100_002f_bc98f8e001b5
services.version: TLSv1_0
services.ja4s: t100100_002f_bc98f8e001b5
services.version: SSLv3
services.issuer_dn: C=US, ST=North Carolina, L=Charlotte, O=Araknis Network (TM), CN=D4:6A:91:77:8C:38\ , OU=AN-110-RT-2L1W
services.common_name: D4:6A:91:77:8C:38 
services.country: US
services.locality: Charlotte
services.province: North Carolina
services.organization: Araknis Network (TM)
services.organizational_unit: AN-110-RT-2L1W
services.subject_dn: C=US, ST=North Carolina, L=Charlotte, O=Araknis Network (TM), CN=D4:6A:91:77:8C:38\ , OU=AN-110-RT-2L1W
services.common_name: D4:6A:91:77:8C:38 
services.country: US
services.locality: Charlotte
services.province: North Carolina
services.organization: Araknis Network (TM)
services.organizational_unit: AN-110-RT-2L1W
services.scan_time: 2025-07-23T05:04:42.982420
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: Araknis
services.product: an-110-rt-2l1w
services.cpe: cpe:2.3:a:araknis:an-110-rt-2l1w:*:*:*:*:*:*:*:*
services.value: login-page
services.path: /login.html
services.endpoint_type: HTTP
services.scan_time: 2025-07-28T06:08:13.644153
services.uri: https://107.136.69.106:7000/login.html
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Last-Modified
services.headers: Thu, 07 Nov 2024 02:58:30 GMT
services.key: Accept-Ranges
services.headers: bytes
services.key: Etag
services.headers: "672c2cd6.17577"
services.key: Content-Type
services.headers: text/html
services.key: Date
services.headers: <REDACTED>
services.key: Connection
services.headers: close
services.key: Content-Length
services.headers: 17577
services.html_tags: <title>Araknis Router</title> <meta charset="UTF-8"> <meta http-equiv="Cache-Control" content="no-store" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="-1" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1., user-scalable=no, target-densityDpi=device-dpi" /> <meta http-equiv="X-UA-Compatible" content="IE=Edge">
services.body: <!doctype html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
  
      <!-- NO CACHE -->
      <meta http-equiv="Cache-Control" content="no-store" />
      <meta http-equiv="Pragma" content="no-cache" />
      <meta http-equiv="Expires" content="-1" />
  
      <title>Araknis Router</title>
  
      <!-- NEED THIS STYLESHEET -->
      <style type="text/css"> 
          @import url("/assets/css/patterns.css");
      </style>
  
      <!-- NEED THIS FOR RESPONSIVESNESS -->
  <!--     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1., user-scalable=no, target-densityDpi=device-dpi" /> -->
  <!--     <meta http-equiv="X-UA-Compatible" content="IE=Edge"> -->
  <style>
  .loginButton {
      min-width: 145px;
      margin: 5px auto;
  }
  </style>
  </head>
  <body class="araknis">
  <div class="content-wrapper">
  
      <div class="dashboard">
  
          <div class="container-fluid">
  
              <div class="login-screen">
                  <div class="row">
                      <div class="col-sm"></div>
                      <div class="col-sm-8 col-md-6">
                          <div class="card-group">
                              <div class="card logo-card" style="background: #182a53;">
                                  <img src="/assets/img/logo-white.png">
                                  <p class="text-xs-center" id="login-model"></p>
                              </div>
                              <div class="card card-block" style="min-width:250px">
                                  <div class="form-group">
                                      <label for="username">Username</label>
                                      <input type="text" class="form-control" id="username" name="username">
                                  </div>
                                  <div class="form-group">
                                      <label for="password">Password</label>
                                      <input type="password" class="form-control" id="password" name="password" onkeypress="onkeypressHandler_pass(event)">
                                  </div>
                                  <div class="text-xs-right">
                                      <input type="button" class="btn btn-primary loginButton" onClick="loginSubmit()" value="Log In">
                                  </div>
                              </div>
                          </div>
                      </div>
                      <div class="col-sm"></div>
                  </div>
              </div>
  
          </div>
  <!--         <div class="page-watcher-template"></div> -->
          <div class="footer-template"></div>
  
      </div>
  
  </div>
  
  <!--Added for Senate Bill No. 327-->
  <div class="modal fade" id="login-modal" tabindex="-1">
      <div class="modal-dialog" role="document">
          <div class="modal-content text-xs-center">
              <div class="modal-header">
                  <h4 class="modal-title">Change New Password</h4>
              </div>
              <div class="modal-body">
                      <label for="username" align="left">New Password</label>
                  <div class="form-group">
                      <input type="password" class="form-control" id="newpassword" data-error="string-no-space" data-password-toggle="true" class="form-control user-account" data-error-message="Please enter a 8~31 characters without space password."  name="newpassword" minlength="8" maxlength="31" autocomplete="off">
                  </div>
                      <label for="password" align="left">Confirm Password</label>
                  <div class="form-group">
                      <input type="password" class="form-control" id="confpassword" data-error="string-no-space" class="form-control user-account" data-error-message="Please enter a valid password and match the password field." name="confpassword" minlength="8" maxlength="31" autocomplete="off" onkeypress="onkeypressHandler_confpass(event)">
                  </div>
                  <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
                  <button type="button" class="btn btn-primary" id="checkDataValidation">Apply</button>
              </div>
          </div><!-- /.modal-content -->
      </div><!-- /.modal-dialog -->
  </div>
  
  <!-- OUR DEPENDENCIES AND COMPONENT SCRIPTS -->
  <script src="/assets/js/lib.components.min.js?version=1141"></script>
  <script src="/assets/js/templates.min.js?version=1141"></script>
  <script src="/assets/js/render.min.js?version=1141"></script>
  <script src="/assets/js/crypto.js?version=1141"></script>
  <!-- Custom Page Script -->
  <script type="text/javascript">
  
  /* Data for post */
  var formData = {
      username: '',
      password: ''
  };
  
  //var md5passHash;
  //var md5newpassHash;
  var plaintext = '12345678901234561234567890123456';
  var key = CryptoJS.enc.Hex.parse('7C37B3AB57CB46B491126CBE93901B55');
  var iv = CryptoJS.enc.Hex.parse('AD9A57619E8A4F200C0015A02EA1DCDE'); // 16 Bytes
  var encrypted = CryptoJS.AES.encrypt(plaintext, key, { iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
  var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
  
  var secure_password;
  var secure_newpassword;
  
  //Time to auto logout
  var logout_timeout = 660;
  
  function onkeypressHandler_pass (e)
  {
      if (e.keyCode == 13) {
          loginSubmit();
      }
  }
  function onkeypressHandler_confpass (e)
  {
      if (e.keyCode == 13) {
          var ret = false;
          ret = checkDataValidation();
          if (ret)
          {
              newpass_set();
          }
          else
          {
              alert('Sorry, looks like you entered an invalid value.');
          }
      }
  }
  
  function setCookie(cname, cvalue, ex_sec) {
    var d = new Date();
    d.setTime(d.getTime() + (ex_sec*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
  }
  
  function loadEvent ()
  {
      $("#newpassword").focusout(function(){
          if($newPassInput.val().length < 8 || $newPassInput.val().length > 31)
          {
              Araknis.error.remove_error($newPassInput);
              Araknis.error.throw_error($newPassInput);
          }
      });
      $("#confpassword").focusout(function(){
          if($newPassInput.val() != $confPassInput.val())
          {
              $confPassInput.attr('title', 'Password and Confirm password not match.');
              Araknis.error.remove_error($confPassInput);
              Araknis.error.throw_error($confPassInput);
          }
      });
      $('#checkDataValidation').on('click', function() {
          var ret = false;
          ret = checkDataValidation();
          if (ret)
          {
              newpass_set();
          }
          else
          {
              alert('Sorry, looks like you entered an invalid value.');
          }
      });
  }
  
  function checkDataValidation ()
  {
      var retval=true;
      var len_flag=false;
      var num_flag=false;
      var sym_flag=false;
      var lowercase_flag=false;
      var uppercase_flag=false;
      var seq_flag=false;
      var repeat_flag=false;
      var specific_flag=false;
  
      $newPassInput = $("#newpassword");
      $confPassInput = $("#confpassword");
  
      // Password validation for SNAPAV
      // An array of password requirements with corresponding
      // regular expressions and index of the requirement list item
      const requirements = [
  	{ regex: /.{8,}/ , index: 0 }, // Minimum of 8 characters
  	{ regex: /[0-9]/, index: 1 }, // At least one number
  	{ regex: /[~!@#$%^&*\(\){}<>|;:/.,\-?_+]/, index: 2 }, // At least one special character
  	{ regex: /[a-z]/, index: 3 }, // At least one lowercase letter
  	{ regex: /[A-Z]/, index: 4 }, // At least one uppercase letter
  	{ regex: /^(?!.*(\w)\1{2,}).+$/ , index: 5 }, //  3 repeated chars Ex: 111,  aaa, AAA
  	{ regex: /^(?!.*(012|123|234|345|567|789|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz|ABC|BCD|CDE|DEF|EFG|FGH|GHI|HIJ|IJK|JKL|KLM|LMN|MNO|NOP|OPQ|PQR|QRS|RST|STU|TUV|UVW|VWX|WXY|XYZ){1}).+$/, index: 6 }, //  3 sequential chars such as 123, abc, DEF
  	{ regex: /^(?!.*(?:Araknis|SnapOne|araknis|snapone)).*$/, index: 7 }, // context specific word
      ]
  
      requirements.forEach(item => {
          // Check if the password matches the requirement regex
          const isValid = item.regex.test($newPassInput.val()); //password
          //const requirementItem = requirementList[item.inde.valuex];
          // Updating class and icon of requirement item if requirement matched or not
          if (isValid) {
              //alert(item.index+"valid  ");
          } else {
  	    if (item.index == 0) {
  		len_flag=true;
  		retval=false;
  	    }
  	    if (item.index == 1) {
  		num_flag=true;
  		retval=false;
  	    }
  	    if (item.index == 2) {
  		sym_flag=true;
  		retval=false;
  	    }
  	    if (item.index == 3) {
  		lowercase_flag=true;
  		retval=false;
  	    }
  	    if (item.index == 4) {
  		uppercase_flag=true;
  		retval=false;
  	    }
  	    if (item.index == 5) {
  		seq_flag=true;
  		retval=false;
  	    }
  	    if (item.index == 6) {
  		repeat_flag=true;
  		retval=false;
  	    }
  	    if (item.index == 7) {
  		specific_flag=true;
  		retval=false;
  	    }
          }
      });
  
      if (len_flag || num_flag || sym_flag || lowercase_flag || uppercase_flag )
      {
  	alert("Password must be between 8-64 charcters long and contain one of each of the following: Uppercase Letter, Lowercase letter, Number and Symbol.");
      }
      else if (seq_flag || repeat_flag)
      {
  	alert("Password must not contain 3 or more sequential or Repetitive charcters. (e.g.123, aaa, abc or !!!)");
      }
      else if (specific_flag)
      {
  	alert("Password must not contain versions of the words araknis and/or snapone.");
      }
      // Password validation for SNAPAV
  
      if($newPassInput.val().length < 8 || $newPassInput.val().length > 31)
      {
          Araknis.error.remove_error($newPassInput);
          Araknis.error.throw_error($newPassInput);
          retval=false;
      }
      if($newPassInput.val() != $confPassInput.val())
      {
          $confPassInput.attr('title', 'Password and Confirm password not match.');
          Araknis.error.remove_error($confPassInput);
          Araknis.error.throw_error($confPassInput);
          retval=false;
      }
      return retval;
  }
  
  function loginSubmit ()
  {
  	// Encryption
  //var string = CryptoJS.enc.Hex.parse('6d657373616765');
  //var plaintext = '12345678901234561234567890123456';
  
  //var key = CryptoJS.enc.Hex.parse('7C37B3AB57CB46B491126CBE93901B55');
  //var iv = CryptoJS.enc.Hex.parse('AD9A57619E8A4F200C0015A02EA1DCDE'); // 16 Bytes
  
  //var encrypted = CryptoJS.AES.encrypt(plaintext, key, { iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
  //var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
  
  
  //console.log('================encrypted-base64:['+encrypted+']['+encrypted.toString(CryptoJS.enc.Utf8)+']====================\n');
  //console.log('================decrypted:['+decrypted+']['+decrypted.toString(CryptoJS.enc.Utf8)+']====================\n');
  	//var encrypted = CryptoJS.AES.encrypt(string, key);
  	//console.log(encrypted.toString(CryptoJS.enc.Utf8));
  	// will output something like:
  	// U2FsdGVkX1/l/LqNSCQixd0iPv4neKAGZvbQDbYUovZE4OcM7l3ULNDgkZQmrweN
  
  	//console.log(encrypted.toString());
  	//alert('The AES encryption ' + decrypted.toString(encrypted.toString()));
  
  	//console.log(decrypted.toString(CryptoJS.enc.Utf8)); 
  	//alert('The AES encryption ' + decrypted.toString(CryptoJS.enc.Utf8));
      formData.username = document.getElementById('username').value;
      formData.password = document.getElementById('password').value;
  
      //secure_password = document.getElementById('password').value;	
      //md5passHash = CryptoJS.MD5(secure_password);
      //console.log(md5passHash.toString());
      //formData.password = md5passHash.toString();
  	
  	// AES encryption
  	plaintext = document.getElementById('password').value;
  	encrypted = CryptoJS.AES.encrypt(plaintext, key, { iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
  	console.log('==========encrypted-base64:['+encrypted+']['+encrypted.toString()+']===============\n');
  	formData.password = encrypted.toString();
  
    //alert('The AES encryption [' + formData.password+']');
  
      /* validation check */
  //     if (formData.username.length == 0) {
  //         alert("invalid username");
  //         return false;
  //     }
  //     if (formData.password.length == 0) {
  //         alert("invalid password");
  //         return false;
  //     }
      /*
       * access login api
       */
      $.ajax({
          url: "/cgi-bin/login.cgi",
          type: "POST",
          async: false,
          contentType: "application/x-www-form-urlencoded",
          data: {
              username: formData.username,
              password: formData.password,
          },
          success: function (data) {
              /*
               *  Return data should be the login status
               *    login_status: 1, login success
               *    login_status: 0, login fail
               *    login_status: 2, detect default password, login fail and request new one.
               *    login_status: 3, login fail 5 times, interdict login for 30 min.
               *    login_status: 4, FW is upgrading, reject login.
               */
  
              var data = JSON.parse(data);
              console.log('login_status:' + data.login_status);
              if (formData.username == "" || formData.password == "")
              {
                  alert("Invalid input!!!");
              }
              else if (parseInt(data.login_status) == 1)
              {
                  //EDX test, if want to modify logout time, must modify mongoose.c too.
                  setCookie("login_ID", data.login_ID, logout_timeout);
                  sessionStorage.clear();
                  sessionStorage.setItem('login_name', formData.username);
                  top.location.replace('/araknis-router.html');
              }
              else if (parseInt(data.login_status) == 2) //For change password
              {
                  //For California law
                  $newPassInput = $("#newpassword");
                  $confPassInput = $("#confpassword");
  
                  $newPassInput.val("");
                  $confPassInput.val("");
  
                  Araknis.error.remove_error($newPassInput);
                  Araknis.error.remove_error($confPassInput);
                  $('#login-modal').modal('show');
              }
              else if (parseInt(data.login_status) == 0) //For login fail countdown
              {
                  alert('The username or password you entered is incorrect.\n\nYou have ' + data.remain + " login attempts remaining.");
              }
              else if (parseInt(data.login_status) == 3)
              {
                  alert('Too many failed login attempts.\n\nThe access to this device will be denied for ' + parseInt(data.pending / 60) + ' Minutes ' + data.pending % 60 + ' Seconds.');
              }
              else if (parseInt(data.login_status) == 4)
              {
                  alert('Firmware is upgrading, please wait for ' + + parseInt(data.pending / 60) + ' Minutes ' + data.pending % 60 + ' Seconds.')
              }
              else
              {
                  alert('Login Fail!!!');
              }
          },
          error: function () {
              console.log('ERROR, login error!!!');
          }
      });
  }
  
  function newpass_set()
  {
  	plaintext = document.getElementById('newpassword').value;
  	encrypted = CryptoJS.AES.encrypt(plaintext, key, { iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
  	console.log('==========encrypted-base64:['+encrypted+']['+encrypted.toString()+']===============\n');
  	formData.newpassword = encrypted.toString();
  
      console.log('==========formData.username:['+formData.username+']===============\n');
      console.log('==========formData.password:['+formData.password+']===============\n');
      console.log('==========formData.newpassword:['+formData.newpassword+']===============\n');
      $.ajax({
          url: "/cgi-bin/login.cgi",
          type: "POST",
          async: false,
          contentType: "application/x-www-form-urlencoded",
          data: {
              username: formData.username,
              password: formData.password,
              newpassword: formData.newpassword
          },
          success: function (data) {
              /*
               *  Return data should be the login status
               *    login_status: 1, login success
               *    login_status: 0, login fail
               */
              var data = JSON.parse(data);
              console.log('login_status:' + data.login_status);
              if (parseInt(data.login_status) == 1)
              {
                  //EDX test, if want to modify logout time, must modify mongoose.c too.
                  setCookie("login_ID", data.login_ID, logout_timeout);
                  // Recording username
                  sessionStorage.clear();
                  sessionStorage.setItem('login_name', formData.username);
                  top.location.replace('/araknis-router.html');
              }
              else
              {
                  alert('Login Fail!!!');
              }
          },
          error: function () {
              console.log('ERROR, login error!!!');
          }
      });
  }
  
  $(document).ready(function() {
      $('#username').focus();
      document.cookie = "login_ID=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
      loadEvent();
      $('#login-model').html("AN-110-RT-2L1W");
      document.title="110 Araknis Router";
  });
  </script>
  <script src="/assets/js/components.min.js?version=1141"></script>
  </body>
  </html>
  
services.body_hash_sha1: sha1:d589e9d3ec9b213ede7fcd3514ed3af1d92e6ae4
services.supported_versions: HTTP/1.1
services.protocol: RTSP
services.transport_protocol: TCP
services.scan_time: 2025-07-28T04:40:40.295616
services.banner: RTSP/1.0 404 Not Found
  CSeq: 1
  
  
services.value: camera
[binary data, 13 values, 318 bytes]