• 15-01-2014, 16:12:36
    #1
    Kullandığım bir cihaza url yolu ile komut göndererek istediğim şekilde çalıştırabiliyorum. Fakat bu komutu verecek olan url yi kendi yazılımımdan göndereceğim için cihazın kontrol panelinde önce login olmam gerekiyor. Benim de aklıma curl geldi fakat curl ile ilgili herhangi bir fikre sahip olmadığım için burada konu açayım dedim. Öncelikle cihazın kontrol panelinde var olan login sayfasının kaynak kodu şu şekilde.

    <!DOCTYPE html>
    <html lang="en-US">
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
    <style type="text/css">
    body {
    	background-color: lightblue;
    }
    td {
    	text-align: left;
    	vertical-align: bottom;
    }
    input, textarea {
    	-webkit-appearance: none;
    	-webkit-border-radius: 0;
    }
    button {
    	-webkit-border-radius: 0;
    	width: 150px;
    	height: 36px
    }
    </style>
    <title>ADAM-6200 Web Login</title>
    </head>
    <body>
    <center>
      <table border="0" width="300px">
        <tr bgcolor="#7FFFD1">
          <th colspan="2">ADAM-6200 Web</th>
        </tr>
        <tr>
          <td>Account:</td>
          <td><input type="text" id="ACT0" size="24"></td>
        </tr>
        <tr>
          <td>Password:</td>
          <td><input type="password" id="PWD0" size="24"></td>
        </tr>
        <tr bgcolor="#7FFFD1">
          <th colspan="2"><button id="APY0" onclick="CheckSubmit()"><font face="arial" size="4">Login</font></button></th>
        </tr>
      </table>
    </center>
    <form action="login.cgi" name="loginform" method="POST">
      <input type="hidden" name="seeddata" value="939B4BE6">
      <input type="hidden" name="authdata">
    </form>
    </body>
    </html>
    <script>var CryptoJS=CryptoJS||function(o,q){var l={},m=l.lib={},n=m.Base=function(){function a(){}return{extend:function(e){a.prototype=this;var c=new a;e&&c.mixIn(e);c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.$super.extend(this)}}}(),j=m.WordArray=n.extend({init:function(a,e){a=this.words=a||[];this.sigBytes=e!=q?e:4*a.length},toString:function(a){return(a||r).stringify(this)},concat:function(a){var e=this.words,c=a.words,d=this.sigBytes,a=a.sigBytes;this.clamp();if(d%4)for(var b=0;b<a;b++)e[d+b>>>2]|=(c[b>>>2]>>>24-8*(b%4)&255)<<24-8*((d+b)%4);else if(65535<c.length)for(b=0;b<a;b+=4)e[d+b>>>2]=c[b>>>2];else e.push.apply(e,c);this.sigBytes+=a;return this},clamp:function(){var a=this.words,e=this.sigBytes;a[e>>>2]&=4294967295<<32-8*(e%4);a.length=o.ceil(e/4)},clone:function(){var a=n.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var e=[],c=0;c<a;c+=4)e.push(4294967296*o.random()|0);return j.create(e,a)}}),k=l.enc={},r=k.Hex={stringify:function(a){for(var e=a.words,a=a.sigBytes,c=[],d=0;d<a;d++){var b=e[d>>>2]>>>24-8*(d%4)&255;c.push((b>>>4).toString(16));c.push((b&15).toString(16))}return c.join("")},parse:function(a){for(var b=a.length,c=[],d=0;d<b;d+=2)c[d>>>3]|=parseInt(a.substr(d,2),16)<<24-4*(d%8);return j.create(c,b/2)}},p=k.Latin1={stringify:function(a){for(var b=a.words,a=a.sigBytes,c=[],d=0;d<a;d++)c.push(String.fromCharCode(b[d>>>2]>>>24-8*(d%4)&255));return c.join("")},parse:function(a){for(var b=a.length,c=[],d=0;d<b;d++)c[d>>>2]|=(a.charCodeAt(d)&255)<<24-8*(d%4);return j.create(c,b)}},h=k.Utf8={stringify:function(a){try{return decodeURIComponent(escape(p.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return p.parse(unescape(encodeURIComponent(a)))}},b=m.BufferedBlockAlgorithm=n.extend({reset:function(){this._data=j.create();this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=h.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,c=b.words,d=b.sigBytes,f=this.blockSize,i=d/(4*f),i=a?o.ceil(i):o.max((i|0)-this._minBufferSize,0),a=i*f,d=o.min(4*a,d);if(a){for(var h=0;h<a;h+=f)this._doProcessBlock(c,h);h=c.splice(0,a);b.sigBytes-=d}return j.create(h,d)},clone:function(){var a=n.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});m.Hasher=b.extend({init:function(){this.reset()},reset:function(){b.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);this._doFinalize();return this._hash},clone:function(){var a=b.clone.call(this);a._hash=this._hash.clone();return a},blockSize:16,_createHelper:function(a){return function(b,c){return a.create(c).finalize(b)}},_createHmacHelper:function(a){return function(b,c){return f.HMAC.create(a,c).finalize(b)}}});var f=l.algo={};return l}(Math);(function(o){function q(b,f,a,e,c,d,g){b=b+(f&a|~f&e)+c+g;return(b<<d|b>>>32-d)+f}function l(b,f,a,e,c,d,g){b=b+(f&e|a&~e)+c+g;return(b<<d|b>>>32-d)+f}function m(b,f,a,e,c,d,g){b=b+(f^a^e)+c+g;return(b<<d|b>>>32-d)+f}function n(b,f,a,e,c,d,g){b=b+(a^(f|~e))+c+g;return(b<<d|b>>>32-d)+f}var j=CryptoJS,k=j.lib,r=k.WordArray,k=k.Hasher,p=j.algo,h=[];(function(){for(var b=0;64>b;b++)h[b]=4294967296*o.abs(o.sin(b+1))|0})();p=p.MD5=k.extend({_doReset:function(){this._hash=r.create([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(b,f){for(var a=0;16>a;a++){var e=f+a,c=b[e];b[e]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360}for(var e=this._hash.words,c=e[0],d=e[1],g=e[2],i=e[3],a=0;64>a;a+=4)16>a?(c=q(c,d,g,i,b[f+a],7,h[a]),i=q(i,c,d,g,b[f+a+1],12,h[a+1]),g=q(g,i,c,d,b[f+a+2],17,h[a+2]),d=q(d,g,i,c,b[f+a+3],22,h[a+3])):32>a?(c=l(c,d,g,i,b[f+(a+1)%16],5,h[a]),i=l(i,c,d,g,b[f+(a+6)%16],9,h[a+1]),g=l(g,i,c,d,b[f+(a+11)%16],14,h[a+2]),d=l(d,g,i,c,b[f+a%16],20,h[a+3])):48>a?(c=m(c,d,g,i,b[f+(3*a+5)%16],4,h[a]),i=m(i,c,d,g,b[f+(3*a+8)%16],11,h[a+1]),g=m(g,i,c,d,b[f+(3*a+11)%16],16,h[a+2]),d=m(d,g,i,c,b[f+(3*a+14)%16],23,h[a+3])):(c=n(c,d,g,i,b[f+3*a%16],6,h[a]),i=n(i,c,d,g,b[f+(3*a+7)%16],10,h[a+1]),g=n(g,i,c,d,b[f+(3*a+14)%16],15,h[a+2]),d=n(d,g,i,c,b[f+(3*a+5)%16],21,h[a+3]));e[0]=e[0]+c|0;e[1]=e[1]+d|0;e[2]=e[2]+g|0;e[3]=e[3]+i|0},_doFinalize:function(){var b=this._data,f=b.words,a=8*this._nDataBytes,e=8*b.sigBytes;f[e>>>5]|=128<<24-e%32;f[(e+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(f.length+1);this._process();b=this._hash.words;for(f=0;4>f;f++)a=b[f],b[f]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360}});j.MD5=k._createHelper(p);j.HmacMD5=k._createHmacHelper(p)})(Math);
    function CheckSubmit(){
    	var oridata;
    	if (document.getElementById("ACT0").value == "")
    	{
    		alert("Please input Account!");
    		document.getElementById("ACT0").focus();
    		return;
    	}
    	if (document.getElementById("PWD0").value == "")
    	{
    		alert("Please input Password!");
    		document.getElementById("PWD0").focus();
    		return;
    	}
    	oridata = document.loginform.seeddata.value + ":" + document.getElementById("ACT0").value + ":" + document.getElementById("PWD0").value;
    	document.loginform.authdata.value = CryptoJS.MD5(oridata);
    	document.loginform.submit();
    }
    </script>
    Bu sayfaya curl ile nasıl login olabilirim? Bu konuda bir örnek gösterebilir misiniz?
  • 15-01-2014, 16:20:58
    #2
    Üyeliği durduruldu
    ffarki bi sistem kullaniliyor cookie kullanmayi deneyin
  • 15-01-2014, 16:22:32
    #3
    sistemde komut yollamak için ayrı sayfa oluşturup uğraşmayabilirsiniz.
  • 15-01-2014, 16:24:08
    #4
    PsdBul adlı üyeden alıntı: mesajı görüntüle
    sistemde komut yollamak için ayrı sayfa oluşturup uğraşmayabilirsiniz.
    Cihazın dosyalarına erişme gibi bir durum olsa login panelini tamamiyle ortadan kaldıracağım ama öyle bir imkanım yok. Üretici firmaya konu ile ilgili mail attım ama ne zaman dönüş yaparlar ve çözüm sunarlar mı sunmazlar mı belli değil ve benim bunu acil olarak yapmam gerekiyor.
  • 15-01-2014, 16:28:12
    #5
    Üyeliği durduruldu
    Curl ile maalesef yapılamıyacağını düşünüyorum.
  • 15-01-2014, 16:29:35
    #6
    Codemaker adlı üyeden alıntı: mesajı görüntüle
    Curl ile maalesef yapılamıyacağını düşünüyorum.
    Peki bunun için yöntem ne olmalıdır? Ne ile yapabilirim?
  • 15-01-2014, 17:20:30
    #7
    loc adlı üyeden alıntı: mesajı görüntüle
    Peki bunun için yöntem ne olmalıdır? Ne ile yapabilirim?
    Neden curl ile olmazmış?
    javascript fonksiyonunun yaptığını çözüp php ye yaptırdınız mı sorun olmaz bence.

    Şu şekilde login olunuyor.
    checksubmit javascript fonksiyonu username ve passwordü alıyor
    form içindeki seeddata verisi ile birlikte md5 e sokuyor. ortaya çıkan md5'i de
    authdata değeri olarak login.cgi dosyasına gönderiyor.

    curl ile login.cgi dosyasına formu şu şekilde submit etmen lazım


    <form action="login.cgi" name="loginform" method="POST">
    <input type="hidden" name="seeddata" value="939B4BE6">
    <input type="hidden" name="authdata" value="<?php md5('939B4BE6'.'kullanıcı_adı'.':'.'parola');?> ">
    </form>


    //Önce seeddata değerini almak için session ile cookie oluşturup sayfayı çağırmak lazım
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_HEADER,0);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
    curl_setopt($ch,CURLOPT_AUTOREFERER,1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);  
    curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/cookies.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookies.txt");
    curl_setopt( $ch, CURLOPT_COOKIESESSION, true );    
    $result = curl_exec($ch); 
    
    //result içinden gelen seeddata değerini alıp yine aynı cookie dosyası ile şu şekilde post etmek lazım
    $post= array(
    						'loginform' => '',
    						'seeddata' => '939B4BE6',
    						'authdata' => md5('939B4BE6'.'kullanıcı_adı'.':'.'parola')
    				);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    javascript dosyasının yaptığı seeddata nın value değeri, admin kullanıcı adı ve parolayı aralarına iki nokta üst üste koyarak md5 hash haline getirip authdata inputuna value olarak atayarak login.cgi a göndermek.
  • 15-01-2014, 18:09:36
    #8
    Konuyla ilgili login sayfasına bizim ulasmamız mumkunmu? Eger mumkun ise detaylı pm atın buna benzer calısmakta olan curl login projem var calısan yapıyı deneyebiiriz..

    Discovery cihazımdan Tapatalk 2 ile gönderildi
  • 15-01-2014, 20:55:28
    #9
    CryTurk adlı üyeden alıntı: mesajı görüntüle
    Konuyla ilgili login sayfasına bizim ulasmamız mumkunmu? Eger mumkun ise detaylı pm atın buna benzer calısmakta olan curl login projem var calısan yapıyı deneyebiiriz..

    Discovery cihazımdan Tapatalk 2 ile gönderildi
    Malesef cihaz yerel ağda. Dışarıyla herhangi bir bağlantısı yok.