Войти

Показать полную графическую версию : [решено] Определение IP и запись в файл


Страниц : [1] 2 3

aggressor_
26-02-2012, 23:37
Здравствуйте!
Выбрал cmd/bat, но это особой роли не играет, подойдёт любой способ.
Нужно записывать ip адрес в файл..
Если возможно, проверять на совпадения с предыдущими подключениями и при совпадении как-то демонстрировать это, будь то звук или табличка какая.
Смысл в том, чтобы каждый раз не заходить на 2ip, копировать адрес и проверять на совпадение вручную, а как-то автоматизировать этот процесс.

Iska
27-02-2012, 08:00
aggressor_, выбирайте любой способ: CMD/WSH/HTA/JS/VBS: Универсальный способ определения внешнего IP и др. (http://forum.script-coding.com/viewtopic.php?id=6857).

Насчёт совпадений при записи в файл: поясните вид такого файла, суть его и смысл.

aggressor_
27-02-2012, 08:55
По вашей ссылке не совсем понял как это применить..

Вид очень простой.
Например:
118.151.161.70
122.221.141.20
и т.д. в столбец
Суть и смысл предупреждений в том, чтобы избежать подключения по одному и тому же ip. К слову, у меня он динамический.

Iska
27-02-2012, 10:11
Суть и смысл предупреждений в том, чтобы избежать подключения по одному и тому же ip. »
Ещё подробнее, пожалуйста.

aggressor_
27-02-2012, 20:34
Объясняю:
Подключился я к интернету и получил ip 118.151.161.70. При следующем подключении новый ip. В случае, если при очередном подключении повторяется ip из списка предыдущих (например опять 118.151.161.70), появляется какое-нибудь предупреждение.
Принцип работы прост. Я запускаю батник, он пишет ip в файл и проверяет на совпадение, при совпадении как-то оповещает.

Iska
27-02-2012, 21:59
В случае, если при очередном подключении повторяется ip из списка »
1. У Вас есть факты, подтверждающие такую ситуацию? Или мы теоретизируем?
2. Какова «глубина» списка? То есть: как и когда мы будем его обнулять?

появляется какое-нибудь предупреждение. »
А затем?

aggressor_
27-02-2012, 22:06
У Вас есть факты, подтверждающие такую ситуацию? Или мы теоретизируем? »
Вполне конкретная ситуация.
2. Какова «глубина» списка? То есть: как и когда мы будем его обнулять? »
Обнулять его нет необходимости. Если потребуется, я сам вручную почищу файл.
А затем? »
На предупреждении действия батника заканчиваются (перезагрузка модема и прочее проделаю сам).

Iska
27-02-2012, 23:01
aggressor_, ясно. Пробуйте, скрипт WSH, не требующий сторонних средств:
Option Explicit

Const ForAppending = 8
Const strPreviousIPList = "PreviousIPList.txt"

Dim strIP
Dim boolIPExists


With WScript.CreateObject("Microsoft.XMLHTTP")
.open "GET", "http://ifconfig.me/ip", False
.send

strIP = Replace(.responseText, vbLf, "")
End With

boolIPExists = False

With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strPreviousIPList) Then
With .OpenTextFile(strPreviousIPList)
Do Until .AtEndOfStream
If .ReadLine() = strIP Then
boolIPExists = True

Exit Do
End If
Loop

.Close
End With
End If

If boolIPExists Then
MsgBox "IP exists", vbOKOnly + vbExclamation, "IP exists"
Else
With .OpenTextFile(strPreviousIPList, ForAppending, True)
.WriteLine strIP

.Close
End With

MsgBox "IP [" & strIP & "] append", vbOKOnly + vbInformation, "IP append"
End If
End With

WScript.Quit 0

aggressor_
28-02-2012, 00:37
Большое спасибо, всё работает.
Не могли бы вы немного изменить скрипт. Т.е. чтобы при добавлении ip в список, писало бы что-то вроде "Ip добавлен". Просто программа работает с небольшой задержкой и приходится открывать txt и смотреть сработал ли скрипт.

Iska
28-02-2012, 00:52
чтобы при добавлении ip в список, писало бы что-то вроде "Ip добавлен". »
Добавил:
MsgBox "IP [" & strIP & "] append", vbOKOnly + vbInformation, "IP append"
в код поста #8 (http://forum.oszone.net/post-1867971.html#post1867971).

aggressor_
28-02-2012, 01:01
Спасибо!

aggressor_
28-02-2012, 06:10
Я немного изменил MsgBox и получилось следующее
If boolIPExists Then
MsgBox "IP [" & strIP & "] уже существует!"& Chr(13) & "Последний добавленный IP [last ip]", vbOKOnly + vbExclamation, "Такой IP уже существует!"
Else
Хотел бы узнать, возможно ли вывести на месте last ip последний добавленный Ip в текстовый файл?
И ещё вопрос, правильно использовать для переноса строки & Chr(13) & или же нужно & Chr(10) & или это вообще не принципиально?

Iska
28-02-2012, 08:52
Хотел бы узнать, возможно ли вывести на месте last ip последний добавленный Ip в текстовый файл? »
Возможно, но надо поменять логику работы скрипта, чтобы происходило чтение всего текстового файла.

Потому я повторюсь: какова будет планируемая «глубина» списка? Т.е., каков может быть его максимальный размер в строках (это нужно знать для того, какую модель чтения выбрать для решения озвученной Вами в предыдущем посту задачи — так же, построчно, или весь файл целиком в память)?

И ещё вопрос, правильно использовать для переноса строки & Chr(13) & или же нужно & Chr(10) & или это вообще не принципиально? »
Обычно манипулируют просто константами «vbCr», «vbLf» и «vbCrLf», в данном случае разница несущественна:
MsgBox "Мама мыла раму." & vbCrLf & "Рабы не мы," & vbCr & "Мы не рабы." & vbLf & "Hello World!"
а обычно в Windows используют пару символов конца строк «vbCrLf».

aggressor_
29-02-2012, 06:32
Мне уже неловко Вас просить.

Поработав день со скриптом, хотелось бы внести некоторые изменения.

При повторении ip хотелось бы видеть MsgBox следующего типа:
Данный ip [111.11.11.11] уже был добавлен в список [01.01.2011 - 18ч:30мин]
Последний добавленный ip [222.222.22.22] [21.02.2012 - 15ч:45мин]

При внесении нового ip:
IP [333.33.33.33] добавлен в список
Последний добавленный ip [222.222.22.22] [21.02.2012 - 15ч:45мин]

Список ip в txt файле тоже хотелось бы немного видоизменить. Рядом с Ip проставлять дату и время, напр
222.222.22.22 [21.02.2012 - 15ч:45мин]

Был бы Вам очень благодарен, если бы Вы смогли это реализовать...
какова будет планируемая «глубина» списка? Т.е., каков может быть его максимальный размер в строках (это нужно знать для того, какую модель чтения выбрать для решения озвученной Вами в предыдущем посту задачи — так же, построчно, или весь файл целиком в память)? »
Максимальный размер не ограничен, хоть 1000, хоть 5000 строк. При необходимости, я просто перемещу txt файл и всё пойдёт заново

Iska
29-02-2012, 10:02
Максимальный размер не ограничен, хоть 1000, хоть 5000 строк. При необходимости, я просто перемещу txt файл и всё пойдёт заново »
Спасибо, ясно.

Примерно так:
Option Explicit

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = 1

Dim objConnection
Dim objRecordset

Dim strPath2DB
Dim strTable

Dim strIP
Dim strLastIP
Dim strPreviousIPs


strPath2DB = WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\"
strTable = Replace("PreviousIPList.txt", ".", "#")

Set objConnection = WScript.CreateObject("ADODB.Connection")
Set objRecordSet = WScript.CreateObject("ADODB.Recordset")

objConnection.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strPath2DB & ";" & _
"Extended Properties=""text;HDR=YES;FMT=CSVDelimited"""

SetTable strTable, objConnection

strIP = GetIP()

With objRecordset
.Open "SELECT TOP 1 * FROM " & strTable & " ORDER BY DateTime DESC", _
objConnection, adOpenStatic, adLockOptimistic, adCmdText

If .RecordCount > 0 Then
strLastIP = .Fields.Item("DateTime").Value & vbTab & .Fields.Item("IP").Value
Else
strLastIP = "[Отсутствует]"
End If

.Close

.Open "SELECT * FROM " & strTable & " WHERE IP = '" & strIP & "'", _
objConnection, adOpenStatic, adLockOptimistic, adCmdText

If .RecordCount > 0 Then
strPreviousIPs = ""

Do Until .EOF
strPreviousIPs = strPreviousIPs & .Fields.Item("DateTime").Value & vbTab & .Fields.Item("IP").Value & vbCrLf

.MoveNext
Loop

MsgBox "Данный IP адрес [" & strIP & "] уже был ранее добавлен в список:" & vbCrLf & strPreviousIPs & vbCrLf & _
"Последний добавленный IP адрес:" & vbCrLf & strLastIP, vbOKOnly + vbExclamation, "IP адрес [" & strIP & "] уже существует"
Else
objRecordset.AddNew Array("DateTime", "IP"), Array(Now(), strIP)

MsgBox "IP адрес [" & strIP & "] добавлен в список." & vbCrLf & vbCrLf & _
"Последний добавленный IP адрес:" & vbCrLf & strLastIP, vbOKOnly + vbExclamation, "IP адрес [" & strIP & "] добавлен"
End If

.Close
End With

objConnection.Close

Set objRecordset = Nothing
Set objConnection = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Function GetIP()
With WScript.CreateObject("Microsoft.XMLHTTP")
.open "GET", "http://ifconfig.me/ip", False
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send

GetIP = Replace(.responseText, vbLf, "")
End With
End Function
'=============================================================================

'=============================================================================
Sub SetTable(strTable, objConnection)
Const adDate = 7
Const adWChar = 130

Dim boolTableExists

Dim objCatalog
Dim objTable


boolTableExists = False

Set objCatalog = WScript.CreateObject("ADOX.Catalog")
Set objCatalog.ActiveConnection = objConnection

For Each objTable In objCatalog.Tables
If objTable.Name = strTable Then
boolTableExists = True

Exit For
End If
Next

If Not boolTableExists Then
Set objTable = WScript.CreateObject("ADOX.Table")

objTable.Name = strTable

objTable.Columns.Append "DateTime", adDate
objTable.Columns.Append "IP", adWChar

objCatalog.Tables.Append objTable
End If

Set objTable = Nothing
Set objCatalog = Nothing
End Sub
'=============================================================================

aggressor_
29-02-2012, 10:25
Большое спасибо!!!
Всё отлично работает!

ul9
01-01-2013, 05:01
Iska, подскажите пожалуйста, а как запустить этот vbs на windows 7 x64? Постоянно выскакивает ошибка...

Iska
01-01-2013, 17:54
Постоянно выскакивает ошибка... »
ul9, в диалоговом окне с сообщением об ошибке нажмите «Ctrl-C». Вставьте полученный текст сообщения об ошибке из буфера обмена сюда, обрамив его тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code).

ul9
01-01-2013, 20:09
Перегнала скрипт в ехе и всё заработало, чудеса.
А ошибка вот такая была
---------------------------
Windows Script Host
---------------------------
Сценарий: test.vbs
Строка: 32
Символ: 1
Ошибка: Не удается найти указанный поставщик. Вероятно, он установлен неправильно.
Код: 800A0E7A
Источник: ADODB.Connection

---------------------------

Iska
02-01-2013, 02:49
Перегнала скрипт в ехе и всё заработало, чудеса. »
Весьма странно.

А ошибка вот такая была »
Не представляю, в чём может быть дело. Составляющие MDAC той или иной версий входят в комплект поставки ОС уже очень давно.




© OSzone.net 2001-2012