Показать полную графическую версию : [решено] Определение IP и запись в файл
aggressor_
26-02-2012, 23:37
Здравствуйте!
Выбрал cmd/bat, но это особой роли не играет, подойдёт любой способ.
Нужно записывать ip адрес в файл..
Если возможно, проверять на совпадения с предыдущими подключениями и при совпадении как-то демонстрировать это, будь то звук или табличка какая.
Смысл в том, чтобы каждый раз не заходить на 2ip, копировать адрес и проверять на совпадение вручную, а как-то автоматизировать этот процесс.
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. К слову, у меня он динамический.
Суть и смысл предупреждений в том, чтобы избежать подключения по одному и тому же ip. »
Ещё подробнее, пожалуйста.
aggressor_
27-02-2012, 20:34
Объясняю:
Подключился я к интернету и получил ip 118.151.161.70. При следующем подключении новый ip. В случае, если при очередном подключении повторяется ip из списка предыдущих (например опять 118.151.161.70), появляется какое-нибудь предупреждение.
Принцип работы прост. Я запускаю батник, он пишет ip в файл и проверяет на совпадение, при совпадении как-то оповещает.
В случае, если при очередном подключении повторяется ip из списка »
1. У Вас есть факты, подтверждающие такую ситуацию? Или мы теоретизируем?
2. Какова «глубина» списка? То есть: как и когда мы будем его обнулять?
появляется какое-нибудь предупреждение. »
А затем?
aggressor_
27-02-2012, 22:06
У Вас есть факты, подтверждающие такую ситуацию? Или мы теоретизируем? »
Вполне конкретная ситуация.
2. Какова «глубина» списка? То есть: как и когда мы будем его обнулять? »
Обнулять его нет необходимости. Если потребуется, я сам вручную почищу файл.
А затем? »
На предупреждении действия батника заканчиваются (перезагрузка модема и прочее проделаю сам).
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 и смотреть сработал ли скрипт.
чтобы при добавлении 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) & или это вообще не принципиально?
Хотел бы узнать, возможно ли вывести на месте 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 файл и всё пойдёт заново
Максимальный размер не ограничен, хоть 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
Большое спасибо!!!
Всё отлично работает!
Iska, подскажите пожалуйста, а как запустить этот vbs на windows 7 x64? Постоянно выскакивает ошибка...
Постоянно выскакивает ошибка... »
ul9, в диалоговом окне с сообщением об ошибке нажмите «Ctrl-C». Вставьте полученный текст сообщения об ошибке из буфера обмена сюда, обрамив его тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code).
Перегнала скрипт в ехе и всё заработало, чудеса.
А ошибка вот такая была
---------------------------
Windows Script Host
---------------------------
Сценарий: test.vbs
Строка: 32
Символ: 1
Ошибка: Не удается найти указанный поставщик. Вероятно, он установлен неправильно.
Код: 800A0E7A
Источник: ADODB.Connection
---------------------------
Перегнала скрипт в ехе и всё заработало, чудеса. »
Весьма странно.
А ошибка вот такая была »
Не представляю, в чём может быть дело. Составляющие MDAC той или иной версий входят в комплект поставки ОС уже очень давно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.