Что нового

[Сеть, интернет] Получать пороль из интрнета

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Можно ли реализовать что бы пароль читался из интернета например(site.ru/pass.ini(txt)), при этом если я изменил пароль в ini файле, то тот старый не подходил уже соответственно в GUI, еще очень нужно что бы было как минимум 3 подходящих паролей, что бы все 3 подходили естественно они тоже были в ini файле на сервере.
Спасибо
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Можно, скачав этот файл на локальный комп, т.к функции INI работают только с локальными файлами:
Содержимое файла passwords.ini:
Код:
[passwords]
pass1=qwerty123
pass2=qwerty12
pass3=qwerty1
Код:
#include <GUIConstants.au3>

GUICreate('Title', 400, 300)
$hInput = GUICtrlCreateInput('', 50, 50, 120)
$hButton = GUICtrlCreateButton('Run', 50, 150, 80)

GUISetState()

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $hButton
			$hDone = False
			$sPath = @ScriptDir & '\passwords.ini'
			$sIni = BinaryToString(InetRead('http://127.0.0.1/passwords.ini', 1))
			$hFile = FileOpen($sPath, 2)
			FileWrite($hFile, $sIni)
			FileClose($hFile)
			$sInput = GUICtrlRead($hInput)
			For $i = 1 To 3
				$sIniPass = IniRead($sPath, 'passwords', 'pass' & $i, '0')
				If $sInput =  $sIniPass Then
					MsgBox(0, 'Done!', 'Пароль <' & $sInput & '> совпал с pass' & $i)
					$hDone = True
					ExitLoop
				EndIf
			Next
			If Not $hDone Then MsgBox(0, 'Fail!', 'Пароль <' & $sInput & '> не найден в базе')
	EndSelect
WEnd


Но при таком способе файл можно будет прочитать :smile: даже удаление этого файла - не 100% защита.

Более безопасно - считать файла в память, и обработать его через регулярные выражения:
Код:
#include <GUIConstants.au3>

GUICreate('Title', 400, 300)
$hInput = GUICtrlCreateInput('', 50, 50, 120)
$hButton = GUICtrlCreateButton('Run', 50, 150, 80)

GUISetState()

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $hButton
			$hDone = False
			$sIni = BinaryToString(InetRead('http://127.0.0.1/passwords.ini', 1))
			$aPasswords = StringRegExp($sIni, '(?si)(pass\d+)=([^\v]+)', 3)
			$sInput = GUICtrlRead($hInput)
			For $i = 0 To UBound($aPasswords) - 1 Step 2
				If $sInput = $aPasswords[$i + 1] Then
					MsgBox(0, 'Done!', 'Пароль <' & $sInput & '> совпал с ' & $aPasswords[$i])
					$hDone = True
					ExitLoop
				EndIf
			Next
			If Not $hDone Then MsgBox(0, 'Fail!', 'Пароль <' & $sInput & '> не найден в базе')
	EndSelect
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Redline [?]
и обработать его через регулярные выражения:
Есть IniString.au3.

nu3dell,
Можно еще так попробовать, с парой логин - пароль:
Код:
#include 'IniString.au3'

$sLog = 'uuuwww'
$sPass = '54321'
$iControl = _Validate_Password($sLog, $sPass)
If Not @error Then
	If $iControl Then
		MsgBox(64, 'Info', 'Все OK')
	Else
		MsgBox(16, 'Ошибка', 'Пароль неправильный')
		Exit
	EndIf
Else
	MsgBox(16, 'Ошибка', 'Произошла ошибка, попробуйте еще раз')
	Exit
EndIf
MsgBox(64, 'Info', 'Работаем дальше')

Func _Validate_Password($s_Login, $s_Password)
	Local $s_TextFromSite, $s_Url = 'http://dl.dropbox.com/u/26599219/Password.ini', _; Ваша ссылка
			$s_Control_Pass, $s_Section = 'Login_Password'
	$s_TextFromSite = InetRead($s_Url, 17)
	If @error Then Return SetError(1)
	$s_TextFromSite = BinaryToString($s_TextFromSite)
	$s_Control_Pass = _IniString_Read($s_TextFromSite, $s_Section, $s_Login, 'Error')
	Return SetError(0, 0, $s_Control_Pass = $s_Password)
EndFunc   ;==>_Validate_Password

По ссылке в коде лежит Password.ini, его содержимое:
Код:
[Login_Password]
wwwuuu=12345
uuuwww=54321
tttiii=87654
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
madmasles отлично то что надо, только нужно что бы мы вводили это в Input, побывал что бы GUICtrlRead() но что то не получилось
И желательно что было не InputBox, а так примерно
Код:
$Log = GUICtrlCreateInput('', 10, 50, 120)
$Pass = GUICtrlCreateInput('', 10, 70, 120)
$btn = GUICtrlCreateButton('GO', 50, 150, 80)

GUISetState()
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
madmasles [?]

Да по сути это, то что я предложил во втором примере, но более навороченное ;)


nu3dell [?]
И желательно что было не InputBox, а так примерно

До чего пользователь ленивый пошел...
Код:
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <IniString.au3>

GUICreate('Title', 400, 300)
$hLogin = GUICtrlCreateInput('', 50, 50, 120)
$hPassword = GUICtrlCreateInput('', 50, 100, 120, 21, $ES_PASSWORD)
$hButton = GUICtrlCreateButton('Run', 50, 150, 80)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $hButton
			$sLog = GUICtrlRead($hLogin)
			$sPass = GUICtrlRead($hPassword)
			$iControl = _Validate_Password($sLog, $sPass)
			If Not @error Then
				If $iControl Then
					MsgBox(64, 'Info', 'Все OK')
				Else
					MsgBox(16, 'Ошибка', 'Пароль неправильный')
					Exit
				EndIf
			Else
				MsgBox(16, 'Ошибка', 'Произошла ошибка, попробуйте еще раз')
				Exit
			EndIf
			MsgBox(64, 'Info', 'Работаем дальше')
    EndSelect
WEnd

Func _Validate_Password($s_Login, $s_Password)
    Local $s_TextFromSite, $s_Url = 'http://dl.dropbox.com/u/26599219/Password.ini', _; Ваша ссылка
            $s_Control_Pass, $s_Section = 'Login_Password'
    $s_TextFromSite = InetRead($s_Url, 17)
    If @error Then Return SetError(1)
    $s_TextFromSite = BinaryToString($s_TextFromSite)
    $s_Control_Pass = _IniString_Read($s_TextFromSite, $s_Section, $s_Login, 'Error')
    Return SetError(0, 0, $s_Control_Pass = $s_Password)
EndFunc   ;==>_Validate_Password
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Блин спасибо большое.
А у меня еще идя появилась, можно сделать что бы вот в ini файле
wwwuuu=1= ip человека.
Вот и что бы еще проверяло ip совпадает то заходи если нет то не заходит.
Получаетесь я в ini файле ввожу ip вручную, а в скрипте он уже проверял сам если не ошибаюсь функция GetIP, при это не каких input не должно быть.
P.s S еще раз спасибо всем
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
nu3dell [?]
Вот и что бы еще проверяло ip совпадает то заходи если нет то не заходит.
А у меня IP динамический и я пролетаю. ;D
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
madmasles
Ну а что не получиться сделать? Сменить так сменить прога не будет запускаться
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Ини-файл хранит связку ключ-значение, поэтому можно попробовать так:
Код:
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <IniString.au3>
#include <INet.au3>

GUICreate('Title', 400, 300)
$hLogin = GUICtrlCreateInput('', 50, 50, 120)
$hPassword = GUICtrlCreateInput('', 50, 100, 120, 21, $ES_PASSWORD)
$hButton = GUICtrlCreateButton('Run', 50, 150, 80)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $hButton
            $sLog = GUICtrlRead($hLogin)
            $sPass = GUICtrlRead($hPassword)
			$sIp = _GetIP()
            $iControl = _Validate_Password($sLog, $sPass & '=' & $sIp)
            If Not @error Then
                If $iControl Then
                    MsgBox(64, 'Info', 'Все OK')
                Else
                    MsgBox(16, 'Ошибка', 'Пароль и (или) IP-адрес неправильные')
                    Exit
                EndIf
            Else
                MsgBox(16, 'Ошибка', 'Произошла ошибка, попробуйте еще раз')
                Exit
            EndIf
            MsgBox(64, 'Info', 'Работаем дальше')
    EndSelect
WEnd

Func _Validate_Password($s_Login, $s_Password)
    Local $s_TextFromSite, $s_Url = 'http://127.0.0.1/Password.ini', _; Ваша ссылка
            $s_Control_Pass, $s_Section = 'Login_Password'
    $s_TextFromSite = InetRead($s_Url, 17)
    If @error Then Return SetError(1)
    $s_TextFromSite = BinaryToString($s_TextFromSite)
    $s_Control_Pass = _IniString_Read($s_TextFromSite, $s_Section, $s_Login, 'Error')
    Return SetError(0, 0, $s_Control_Pass = $s_Password)
EndFunc   ;==>_Validate_Password
Т.е. будет проверяться связка "логин" <-> "пароль + IP-адрес".
Содержимое Password.ini:
Код:
[Login_Password]
login1=pass1=255.255.255.1
login2=pass2=255.255.255.2
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Redline
Спасибо, все отлично, сейчас пройдет 24 часа и поставлю +, просто после вчерашнего еще время не прошло
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Как переделать этот код, что бы сверял в ini только ip, бел логинов и паролей?!
Код:
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <IniString.au3>
#include <INet.au3>

GUICreate('Title', 400, 300)
$hLogin = GUICtrlCreateInput('', 50, 50, 120)
$hPassword = GUICtrlCreateInput('', 50, 100, 120, 21, $ES_PASSWORD)
$hButton = GUICtrlCreateButton('Run', 50, 150, 80)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $hButton
            $sLog = GUICtrlRead($hLogin)
            $sPass = GUICtrlRead($hPassword)
            $sIp = _GetIP()
            $iControl = _Validate_Password($sLog, $sPass & '=' & $sIp)
            If Not @error Then
                If $iControl Then
                    MsgBox(64, 'Info', 'Все OK')
                Else
                    MsgBox(16, 'Ошибка', 'Пароль и (или) IP-адрес неправильные')
                    Exit
                EndIf
            Else
                MsgBox(16, 'Ошибка', 'Произошла ошибка, попробуйте еще раз')
                Exit
            EndIf
            MsgBox(64, 'Info', 'Работаем дальше')
    EndSelect
WEnd

Func _Validate_Password($s_Login, $s_Password)
    Local $s_TextFromSite, $s_Url = 'http://127.0.0.1/Password.ini', _; Ваша ссылка
            $s_Control_Pass, $s_Section = 'Login_Password'
    $s_TextFromSite = InetRead($s_Url, 17)
    If @error Then Return SetError(1)
    $s_TextFromSite = BinaryToString($s_TextFromSite)
    $s_Control_Pass = _IniString_Read($s_TextFromSite, $s_Section, $s_Login, 'Error')
    Return SetError(0, 0, $s_Control_Pass = $s_Password)
EndFunc   ;==>_Validate_Password
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
nu3dell [?]
сверял в ini только ip, бел логинов и паролей
Код:
#include <GUIConstants.au3>
#include <INet.au3>

GUICreate('Title', 200, 100)
$hButton = GUICtrlCreateButton('Run', 50, 35, 100)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $hButton
			$sIP = _GetIP()
			_Validate_IP($sIP)
            If Not @error Then
				MsgBox(64, 'Info', 'Все OK')
				; здесь идет код для пользователя с верным IP
			ElseIf @error = 2 Then
				MsgBox(16, 'Ошибка', 'Данному IP-адресу отказано в доступе')
            Else
                MsgBox(16, 'Ошибка', 'Произошла ошибка при чтении файла с хостинга, повторите попытку')
            EndIf
    EndSelect
WEnd

Func _Validate_IP($s_IP)
    Local $s_TextFromSite, $s_Url = 'http://localhost/ip.txt'; Ваша ссылка
    $s_TextFromSite = InetRead($s_Url, 17)
    If @error Then Return SetError(1)
    $s_TextFromSite = BinaryToString($s_TextFromSite)
    If StringRegExp($s_TextFromSite, '\b' & $s_IP & '\b') Then
		Return 0
	Else
		Return SetError(2)
	EndIf
EndFunc   ;==>_Validate_IP
содержимое ip.txt:
Код:
123.123.123.123
321.321.321.321
213.213.213.213
или так:
Код:
123.123.123.123 321.321.321.321 213.213.213.213
 
Верх