Биллинговая система Nodeny
22 Ноября 2024, 12:11:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: WEB авторизация с доп проверкой локального IP  (Прочитано 4856 раз)
Inzevision
NoDeny
Пользователь
*

Карма: 3
Offline Offline

Сообщений: 59


Просмотр профиля Email
« : 26 Октября 2015, 11:24:05 »

Добрый день мои хорошие Улыбающийся
Несколько дней назад созрела мысль и на 90% реализовалась. Загвоздка в методе input (html).
И так имеем:
  • Скрипт для выяснение локального IP
Код:
<script type="text/javascript">

// NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23
var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

if (RTCPeerConnection) (function () {
    var rtc = new RTCPeerConnection({iceServers:[]});
    if (1 || window.mozRTCPeerConnection) {      // FF [and now Chrome!] needs a channel/stream to proceed
        rtc.createDataChannel('', {reliable:false});
    };
   
    rtc.onicecandidate = function (evt) {
        // convert the candidate to SDP so we can run it through our general parser
        // see https://twitter.com/lancestout/status/525796175425720320 for details
        if (evt.candidate) grepSDP("a="+evt.candidate.candidate);
    };
    rtc.createOffer(function (offerDesc) {
        grepSDP(offerDesc.sdp);
        rtc.setLocalDescription(offerDesc);
    }, function (e) { console.warn("offer failed", e); });
   
   
    var addrs = Object.create(null);
    addrs["0.0.0.0"] = false;
    var addrss = Object.create(null);
    addrss["0.0.0.0"] = false;
   
    function updateDisplay(newAddr) {
        if (newAddr in addrs) return;
        else addrs[newAddr] = true;
        var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; });

        if (displayAddrs[1]){
//        document.getElementById('list').textContent = displayAddrs.join(" or perhaps ") || "n/a";
        document.getElementById('list').textContent = displayAddrs[1] || "n/a";}else{

document.getElementById('list').textContent = displayAddrs[0] || "n/a";}
    }
   
    function grepSDP(sdp) {
        var hosts = [];
        sdp.split('\r\n').forEach(function (line) { // c.f. http://tools.ietf.org/html/rfc4566#page-39
            if (~line.indexOf("a=candidate")) {     // http://tools.ietf.org/html/rfc4566#section-5.13
                var parts = line.split(' '),        // http://tools.ietf.org/html/rfc5245#section-15.1
                    addr = parts[4],
                    type = parts[7];
                if (type === 'host') updateDisplay(addr);
            } else if (~line.indexOf("c=")) {       // http://tools.ietf.org/html/rfc4566#section-5.7
                var parts = line.split(' '),
                    addr = parts[2];
                updateDisplay(addr);
            }
        });
    }
})(); else {
//    document.getElementById('list').innerHTML = "<code>ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1</code>";
    document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";
}

</script>


  • Форма авторизации с сайта для доступа в инет
Код:
<?php
$day_now
=date('j');
$year_now=date('Y')-1900;
$mon_now=date('m')-1;
$ses1=$day_now.$mon_now.$year_now;
?>


<script type="text/javascript" src=/i/md5.js></script>
<form method=get action="/cgi-bin/stat.pl" onsubmit='pp.value=hex_md5(ses.value+" "+pp.value); return true'>
<input type=hidden name=ses value='<?php echo $ses1?>'>
<input type=hidden name=a value='98'>

<table class="text" style="color:424649l font-size:9px">
<tr><td align=center colspan=3><b>Auth</b></td></tr>
<tr><td align=left width='33%'>Login:</td><td><input type=text name=uu size=15 value='' tabindex=1></td>
<tr><td align=left width='33%'>Password:</td><td><input type=password name=pp size=15 value='' tabindex=2></td>
<tr><td align=center colspan=3><input type=submit value='Enter' tabindex=3></td></tr>
</table>
</form>



    Никак не получается отправить узнанный IP через форму. Понятно, что результатом выполнения скрипта будет переменная, о которой сервер ничего не знает.
    Вставить результат в форму тоже не получатся
    Код:
    <input type=text name=a value='<?php echo "<span id=list></span>"?>'> 
    и никакими другими способами тоже.
    Подозреваю, что нужно преобразовать результат на стороне клиента в переменную и работать уже с ней. Но в скриптинге не силён Грустный
    Милостиво прошу помощи в разрешении этой задачки Улыбающийся
    Записан
    Inzevision
    NoDeny
    Пользователь
    *

    Карма: 3
    Offline Offline

    Сообщений: 59


    Просмотр профиля Email
    « Ответ #1 : 26 Октября 2015, 15:54:40 »

    Доковырял я этот скрипт Улыбающийся

    Нужно в функции изменить (красным):
      function updateDisplay(newAddr) {
            if (newAddr in addrs) return;
            else addrs[newAddr] = true;
            var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; });

            if (displayAddrs[1]){
            document.getElementById('list').value = displayAddrs[1] || "n/a";}else{
            document.getElementById('list').value = displayAddrs[0] || "n/a";}
        }



    А в форме написать тег input следующим образом.
        <input type=hidden name=ip id="list">

    Теперь строка авторизации выглядит так.
       /cgi-bin/stat.pl?ses=269115&a=98&ip=10.10.20.31&uu=test&pp=5de1d4ca2ca2bae11cac34ce950f3477

    Осталось настроить проверку IP на стороне биллинга и писать подозрительные в лог Улыбающийся
    Помощь приветствуется.
    Записан
    Страниц: [1]
      Печать  
     
    Перейти в:  

    Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!