Jump to content

Расширение авторизатора


Recommended Posts

О! madf, ты отказался от фиксированного порта источника, это радует, сразу решается проблема работы через роутер.

 

С это версией, при входе-выходе из настроек, клиент перестает отвечать на keepalive серверу.

Убрал вызов clnp->SetServer(settings.serverIP, settings.serverPort);

из формы настроек и поставил в нажатие на подключиться.

Link to post
Share on other sites

О! madf, ты отказался от фиксированного порта источника, это радует, сразу решается проблема работы через роутер.

 

Сам не знаю зачем это было сделано раньше. Боря когда-то говорил что-то про файрволы, но я с нормальной схемой проблем с файрволами не наблюдаю.

Link to post
Share on other sites

собрал новую версию, главная фича - проверка обновлений:

 

- в веб ссылку можно добавлять дополнительный текст, при нажатии будет выделен

и открыт фрагмент с http://

- исправлен баг: если в момент автоподключения нажать отключиться,

то срабатывало автосворачивание

 

- исправлена ошибка, когда при отсутствии направлений не выводятся сообщения

об ошибках

- написана функция проверки обновлений. Поиск обновления ведется на сервере,

который указан в настройках, по протоколу HTTP загружается файл /iaversion.txt

в котором первой строкой идет текущая версия в таком формате, как подписано

в авторизаторе, а второй строкой - ссылка на файл обновления.

Проверка обновления происходит в момент первого подключения.

Нажатие на ссылку открывает браузер.

- внесена задержка при закрытии авторизатора для успешного отключения на сервере

 

- новая библиотека ia_auth_c позволяет слать запрос с произвольного порта авторизатора,

что решает проблему работы через роутеры типа d-link... Взята из qia.

 

Обнаружена фича:

- В ini файле можно вручную задать параметры IPEditable=0 и PortEditable=0

чтобы запретить пользователю менять адрес и порт сервера.

 

Важное добавление:

- запрещен запуск второй копии приложения

 

 

http://icenet.net.ua/inetaccess2.61-11.8w_src.rar

Link to post
Share on other sites

madf, такой момент еще мне не понятен в работе ia_auth_c:

пробую пропустить авторизацию через NAT, в этом случае подключение нормально происходит, но на keepalive посылки авторизатор не отвечает вообще.

Может сервер где то кодирует посылку адресом интерфейса отправителя?

...

Разрулил свою проблему ДНСом, вопрос теряет актуальность

Link to post
Share on other sites

madf, такой момент еще мне не понятен в работе ia_auth_c:

пробую пропустить авторизацию через NAT, в этом случае подключение нормально происходит, но на keepalive посылки авторизатор не отвечает вообще.

Может сервер где то кодирует посылку адресом интерфейса отправителя?

...

Разрулил свою проблему ДНСом, вопрос теряет актуальность

Не кодирует. Но с NAT там действительно заморочка может быть. Это UDP все-таки, без установки соединения. Инициирующий пакет приходит от авторизатора, но потом инициатором диалога становится сервер. Может от этого сносит крышу NAT'у. Надо посмотреть tcpdump.

Но DNS решает, да. Мы у себя уже год как на DNS авторизатор перевели. Это позволило избавиться от NAT на access'ах и переполнений таблиц conntrack.

Link to post
Share on other sites

Не кодирует. Но с NAT там действительно заморочка может быть. Это UDP все-таки, без установки соединения. Инициирующий пакет приходит от авторизатора, но потом инициатором диалога становится сервер. Может от этого сносит крышу NAT'у. Надо посмотреть tcpdump.

смотрел tcpdump и windump - сто процентов пакет с измененным адресом источника доходит до авторизатора, но авторизатор не отвечает на него.

Link to post
Share on other sites

Дуже цікаво про оновлення авторизатора :( Воно працює, звідки оновлюється?

 

Хочу в авторизатор вставити замість статистики банер, який буде малюваться і віддаваться в авторизатор. Зараз зробив через tcpbrowser, але це треш якийсь виходить. Як витягнути зображення в авторизатор іншими "правильними" методами, а то я в с++ не дуже))

post-4773-047141000 1285835128_thumb.png

Link to post
Share on other sites

Дуже цікаво про оновлення авторизатора :( Воно працює, звідки оновлюється?

- написана функция проверки обновлений. Поиск обновления ведется на сервере,

который указан в настройках, по протоколу HTTP загружается файл /iaversion.txt

в котором первой строкой идет текущая версия в таком формате, как подписано

в авторизаторе, а второй строкой - ссылка на файл обновления.

Проверка обновления происходит в момент первого подключения.

Нажатие на ссылку открывает браузер.

 

Хочу в авторизатор вставити замість статистики банер, який буде малюваться і віддаваться в авторизатор. Зараз зробив через tcpbrowser, але це треш якийсь виходить. Як витягнути зображення в авторизатор іншими "правильними" методами, а то я в с++ не дуже))

а чем не способ? по моему лучше не придумать

Link to post
Share on other sites

це ж якби використовує екслорер, хотілось би якесь інше рішення. Чи це саме те? ))

 

Чи можна оновляти так як в мозіллі наприклад, при запуску авторизатор викачує нову версію, оновляється і перезапускається? Чи це вже я на грані фантастіки)))

 

 

Моє рішення баннера

 

browser->Navigate(WideString("http://host/banner_public.php"));

 

 

banner_public.php:

<html>                                                                                                                                                                                                                                       
<head>                                                                                                                                                                                                                                       
<style>                                                                                                                                                                                                                                      
*{                                                                                                                                                                                                                                           
margin:0;                                                                                                                                                                                                                                    
padding:0;                                                                                                                                                                                                                                   
border:none;                                                                                                                                                                                                                                 
background-color:threedface;                                                                                                                                                                                                                 
}                                                                                                                                                                                                                                            
</style>                                                                                                                                                                                                                                     
</head>                                                                                                                                                                                                                                      
<body oncontextmenu="return false" onselectstart="return false" oncopy="return false" ondragstart="return false" scroll="no">                                                                                                                

<?php                                                                                                                                                                                                                                        
//print getenv('REMOTE_ADDR');                                                                                                                                                                                                               
?>                                                                                                                                                                                                                                           
<DIV STYLE="height:90px; width:401px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://host/img_public.php', sizingMethod='scale');"></DIV>                                                                       
</body>                                                                                                                                                                                                                                      
</html> 

 

img_public.php:

error_reporting(0);                                                                                                                                                                                                                          
$ip = getenv('REMOTE_ADDR');                                                                                                                                                                                                                 
mysql_connect('localhost', 'user', 'pass');                                                                                                                                                                                       
mysql_select_db('stg') or (die('error'));                                                                                                                                                                                                    
$q = mysql_query('select * from users where IP = "' . $ip . '" ') or die('error');                                                                                                                                                           
$r = mysql_fetch_array($q) or die('error');                                                                                                                                                                                                  
$q1 = mysql_query('select * from tariffs where name= "' . $r['Tariff'] . '"') or die('error');                                                                                                                                               
$r1 = mysql_fetch_array($q1) or die('error');                                                                                                                                                                                                


$fee = $r1['Fee'];                                                                                                                                                                                                                           

$cash = $r['Cash'];                                                                                                                                                                                                                          

$tariff = $r['Tariff'];                                                                                                                                                                                                                      


if ($cash == 0) {                                                                                                                                                                                                                            
   $month = 1;                                                                                                                                                                                                                              
} elseif ($cash > 0) {                                                                                                                                                                                                                       
   $month = $cash / $fee;                                                                                                                                                                                                                   
}                                                                                                                                                                                                                                            

$starttime = strtotime("now");                                                                                                                                                                                                               
// strtotime("+$month month");                                                                                                                                                                                                               
$endtime = mktime(0, 0, 0,  date("n",strtotime("+$month month")),5, date("Y",strtotime("+$month month")));                                                                                                                                   


$days = round((  $endtime - $starttime )/60/60/24);                                                                                                                                                                                          

if(substr($days, -1) == 1 )                                                                                                                                                                                                                  
{                                                                                                                                                                                                                                            
   $d = " ........";                                                                                                                                                                                                                        
}                                                                                                                                                                                                                                            
elseif(substr($days, -1) == 2 || substr($days, -1) == 2 || substr($days, -1) == 3 || substr($days, -1) == 4)                                                                                                                                 
{                                                                                                                                                                                                                                            
   $d = " ......";                                                                                                                                                                                                                          
}                                                                                                                                                                                                                                            
else{                                                                                                                                                                                                                                        

   $d = " ........";                                                                                                                                                                                                                        
}                                                                                                                                                                                                                                            



header("Content-type: image/png");                                                                                                                                                                                                           
$img = imagecreate(400, 80);                                                                                                                                                                                                                 
$black = ImageColorAllocate($img, 0, 0, 0);                                                                                                                                                                                                  
$green = ImageColorAllocate($img, 0, 255, 0);                                                                                                                                                                                                
$white = ImageColorAllocate($img, 255, 255, 255);                                                                                                                                                                                            
$trans = ImageColorTransparent($img, $white);                                                                                                                                                                                                
imagefill($img, 0, 0, $white);                                                                                                                                                                                                               
putenv('GDFONTPATH=' . realpath('.'));                                                                                                                                                                                                       
$font = '/usr/local/www/apache22/data/tahoma.ttf';                                                                                                                                                                                           
$tariff = "..........: " . $tariff;                                                                                                                                                                                                          
$money = "....................: " . $days . $d;                                                                                                                                                                                              
imagettftext($img, 10, 0, 0, 10, $black, $font, $tariff);                                                                                                                                                                                    
imagettftext($img, 10, 0, 0, 25, $black, $font, $money);                                                                                                                                                                                     
imagepng($img);                                                                                                                                                                                                                              
imagedestroy($img);                                                                                                                                                                                                                          
?> 

 

 

tcpwebbrowser зберігає в кеші зображення, і воно оновляється тільки при перезапуску авторизатора( але коли як)

Link to post
Share on other sites

це ж якби використовує екслорер, хотілось би якесь інше рішення. Чи це саме те? ))

 

Чи можна оновляти так як в мозіллі наприклад, при запуску авторизатор викачує нову версію, оновляється і перезапускається? Чи це вже я на грані фантастіки)))

 

не эксплорер, а браузер по умолчанию открывается. я не стал заморачиваться

 

tcpwebbrowser зберігає в кеші зображення, і воно оновляється тільки при перезапуску авторизатора( але коли як)

 

а если так:

	<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META http-equiv=CONTENT-TYPE content="text/html; charset=windows-1251">
<META HTTP-EQUIV=Refresh CONTENT="60; URL=/desired.html">

?

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...