1

Тема: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Здравствуйте! Я практически чайник, ничего сложнее скриптов под Линейдж-2 не писал.
Не буду вдаваться в подробности, зачем мне это нужно, но смысл в том, чтобы в окно браузера, куда я вручную поставлю курсор, вводились ip адреса из заданного диапазона как часть текста по очереди, с нажатием ENTER после каждого ввода.

Допустим,имеем диапазон адресов 82.145.220.0 - 82.145.223.255. Первая и вторая секции меняться никогда не будут.
Нужен последовательный ввод в строку адреса текста типа:
user.ban=82.145.220.0
user.ban=82.145.220.1
...
user.ban=82.145.223.255

Сначала, как я понимаю, нужно присвоить значения переменным, которые я буду вводить вручную в текст скрипта:


sec1 := 82; первая секция диапазона ip адресов
sec2 := 145; вторая секция диапазона ip адресов
startip3 := 220; начало диапазона ip адресов 3-я секция
endip3 := 223; конец диапазона ip адресов 3-я секция
startip4 := 0; начало диапазона ip адресов 4-я секция
endip4 := 255; конец диапазона ip адресов 4-я секция

Теперь нужно сделать цикл по нажатию кнопки, допустим, 1. Вот тут проблема. Видимо, будет цикл в цикле. Из школьного курса, на бейсике я бы сделал это так (без учета пауз):


30 for i=startip3 to endip3                   
40 if i=endip3 then goto 100                
50 for t=0 to 255
60 print "user.ban="sec1"."sec2"."i"."t"
65 t=t+1
70 next t
75 i=i+1
80 next i
100 for k=startip4 to endip4
110 print "user.ban="sec1"."sec2"."i"."k
115 k=k+1
120 next k
125 goto 75
126 ' строка 30: i - текущее значение ip 3-й секции
127 ' строка 40: если i  равно endip3, то идем в цикл, где 4-я секция начинается с нуля и заканчивается 255, иначе в цикл, где она начинается со startip4 и заканчивается endip4
130 end

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

Если кто-нибудь что-нибудь понял, помогите плиз )))

2

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

как получить текущее значение счетчика в цикле

Вы про это:

Loop
	MsgBox % A_Index
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov

Да, думаю, это то, что нужно :-) Сейчас попробую сделать целый скрипт.

4 (изменено: sn_ud, 2016-05-29 13:33:23)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Что-то не выходит каменный цветок...
Вопросов несколько:
1) после перебора адресов 4-й секции к 3-й почему-то не прибавляется 1... никак не найду, где ошибка?
2) Можно ли как-то сразу вставлять содержимое переменной Longtext? Оно как бы набирается побуквенно и это слегка медленно...
3) Можно ли в операторе Loop как-то задать начальное значение счетчика A_Index?

Вот получившийся скрипт: 


;82.145.220.0 - 82.145.223.255 - наш диапазон адресов

sec1 := 82 ; первая секция диапазона ip фдресов
sec2 := 145 ; вторая секция диапазона ip адресов
startip3 := 220 ; начало диапазона ip адресов 3-я секция
endip3 := 223 ; конец диапазона ip адресов 3-я секция
startip4 := 0 ; начало диапазона ip адресов 4-я секция
endip4 := 255 ; конец диапазона ip адресов 4-я секция
sizeip3 := endip3-startip3
sizeip4 := endip4-startip4
longtext := "http://zabanmenyzpolnostyu/user_ban?=" ;длинная часть ссылки, чтоб не замусоривать код скрипта
F1::
  Loop, %sizeip3% ;перебор ip адресов в 3-й секции
  {


	i := startip3 - 1 + A_Index
	if i = endip3 
        goto Label0 ;перебирать до 255 или до endip4
    Loop, 256 ;перебор адресов 4-й секции от 0 до 255
    {

	m := A_index - 1 
	Send %longtext%%sec1%.%sec2%.%i%.%m%
	Send {enter}
    }



	Label0: ;метка перехода при совпадении условия
     Loop, %sizeip4% ;перебор адресов 4-й секции от 0 до endip4
     {
	k := startip4 - 1 + A_Index
	Send %longtext%%sec1%.%sec2%.%i%.%k%
	Send {enter}
	 }
  }

5 (изменено: serzh82saratov, 2016-05-29 16:26:47)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Например так.

ip1 = 82.145.220.0 
ip2 = 82.145.223.255

Func(ip1, ip2)

Func(ip1, ip2) {
	oip1 := StrSplit(ip1, "."), oip2 := StrSplit(ip2, ".") 
	Loop 4
		nip1 .= Format("{:03d}", oip1[A_Index])
		, nip2 .= Format("{:03d}", oip2[A_Index])
	Loop % nip2 - nip1 + 1
		ToolTip % RegExReplace(Format("{:012d}", nip1 + A_Index - 1)
							, "(...)(...)(...)(...)","$1.$2.$3.$4")
}

Или так.


ip1 = 82.145.220.998
ip2 = 82.145.221.002

Func(ip1, ip2)

Func(ip1, ip2) {
	oip1 := StrSplit(ip1, "."), oip2 := StrSplit(ip2, "."), oip1[4]--
	To := oip2[1]+0 "." oip2[2]+0 "." oip2[3]+0 "." oip2[4]+0 
	While New != To { 
		While ++oip1[5 - A_Index] = 1000
			If (oip1[5 - A_Index] = "") || (oip1[5 - A_Index] := 0) 
				Return 
		MsgBox % New := oip1[1] "." oip1[2] "." oip1[3] "." oip1[4]
	}
}	
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov, Судя по коду в сообщении 4 Надо что бы было не 220.998...220.999...221.0(от 0 до 999), а от минимально заданного до максимально заданного, а точнее до 255 в последней секции.
Вот мой вариант(не функция)

SetBatchLines -1
SetKeyDelay, -1
PauseTime := 1
longtext := "http://zabanmenyzpolnostyu/user_ban?="
Sec1_2 := "82.145"

Sec3 := [220  ,  223]
Sec4 := [0       ,  225]

SizeSec3 := Sec3.2 - Sec3.1 + 1
SizeSec4 := Sec4.2 - Sec4.1 + 1

MaxProgress := SizeSec4 * SizeSec3

F1::
IndexProgress := 0
loop % SizeSec3
{
	IndexS3 := Sec3.1 + A_Index - 1
	Loop % SizeSec4
	{
		IndexS4 := Sec4.1 + A_Index - 1
		IndexProgress++
		Clipboard :=  longtext Sec1_2 "."  IndexS3 "." IndexS4
		sleep 50
		SendInput {LCtrl Down}{vk56}{LCtrl Up}{Enter}
		ToolTip % Sec1_2 "."  IndexS3 "." IndexS4 "`nВыполнено: " (100 - Round(100 - IndexProgress * 100 / MaxProgress)) "%"
		sleep %PauseTime%
	}
}

7

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Ага, что то 255 я позабыл, попозже поправлю.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8 (изменено: sn_ud, 2016-05-29 16:51:31)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

yalanne,
Ваш скрипт практически работает, за одним исключением: в 4-й секции до достижения крайнего значения 3-го диапазона должно набирать 255, и только в последнем цикле 80.145.220.0 - 80.145.223.Y
Y - может не равняться 255. А скрипт, как я понимаю, при Y=200 будет считать только значения 0...200 в 4-й секции, т.е. не весь диапазон перебирается.

9

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Так работает?


ip1 = 80.145.220.0
ip2 = 80.145.223.200
 
Func(ip1, ip2)

Func(ip1, ip2) {
	oip1 := StrSplit(ip1, "."), oip2 := StrSplit(ip2, "."), oip1[4]--
	To := oip2[1]+0 "." oip2[2]+0 "." oip2[3]+0 "." oip2[4]+0 
	While New != To {
		Loop {
			If (++oip1[I := 5 - A_Index] = 256) && !(oip1[i] := 0)
				Continue
			If (oip1[i] = "")
				Return 
			Break
		}
		MsgBox % New := oip1[1] "." oip1[2] "." oip1[3] "." oip1[4]
	}
}	
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov
вроде да, только вместо окошка с кнопкой мне нужно просто нажатие ENTER )) Сейчас попробую протестировать полностью.

11

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov, А зачем еще ip2 делить на массив и заносить в To?
Если указать While New != ip2, то будет то же самое ведь.

12

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

На случай если в ip2 где то есть лидирующие нули, сравнение идёт как строк.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

А понял. Спасибо.

14 (изменено: serzh82saratov, 2016-05-29 19:08:36)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

А лучше так:


ip1 = 82.145.254.254
ip2 = 82.145.255.255

Func(ip1, ip2)

Func(ip1, ip2) {  
	oip1 := StrSplit(ip1, "."), nip1 := "0x", oip2 := StrSplit(ip2, "."), nip2 :="0x" 
	Loop 4
		nip1 .= Format("{:02x}", oip1[A_Index]), nip2 .= Format("{:02x}", oip2[A_Index])
	Loop % nip2 - nip1 + 1 
		MsgBox % ((0xff000000 & (n := nip1 + A_Index - 1)) >> 24) "." 
			. ((0x00ff0000 & n) >> 16) "." ((0x0000ff00 & n) >> 8) "." (0x000000ff & n)  
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15 (изменено: sn_ud, 2016-05-29 17:51:55)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Но всё-таки, как в варианте не функции добавить условие проверки на окончание 3-й секции? А в скрипте с функциями вместо месседжбокса сделать просто вывод строкой с последующим нажатием ENTER?

16

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

sn_ud пишет:

окончание 3-й секции

Что это значит?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17 (изменено: sn_ud, 2016-05-29 18:10:15)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov
когда я запускаю ваш скрипт, он всё правильно сначала вбивает:

82.145.220.0
82.145.220.1
..........
82.145.220.225 - здесь начинает вбивать неправильно (4-я секция обрывается на 225)
82.220.221.0

А надо:
82.145.220.0
82.145.220.1
..........
82.145.220.225
82.145.220.226
.........
82.145.220.255
82.145.221.0
..........
82.145.223.225 (окончание диапазона) - вот только здесь 4-я секция должна останавливаться

18 (изменено: serzh82saratov, 2016-05-29 19:08:27)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

А надо:
82.145.220.225
82.145.220.226

Сейчас так и есть:

ip1 = 82.145.220.224
ip2 = 82.145.223.225

Func(ip1, ip2)

Func(ip1, ip2) {  
	oip1 := StrSplit(ip1, "."), nip1 := "0x", oip2 := StrSplit(ip2, "."), nip2 :="0x" 
	Loop 4
		nip1 .= Format("{:02x}", oip1[A_Index]), nip2 .= Format("{:02x}", oip2[A_Index])
	Loop % nip2 - nip1 + 1 
		MsgBox % ((0xff000000 & (n := nip1 + A_Index - 1)) >> 24) "." 
			. ((0x00ff0000 & n) >> 16) "." ((0x0000ff00 & n) >> 8) "." (0x000000ff & n)
}

вы про код из 14 поста?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19 (изменено: sn_ud, 2016-05-29 18:13:37)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov нет, из 6-го, а ваш скрипт всё правильно вбивает, там вопрос только в форме вывода результата )

20 (изменено: serzh82saratov, 2016-05-29 19:12:31)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Так из 6-го и не был моим.

#SingleInstance Force
#NoEnv 
SetKeyDelay, 20

ip1 = 82.145.223.221
ip2 = 82.145.223.225
longtext := "http://zabanmenyzpolnostyu/user_ban?="

Func(ip1, ip2, longtext)

Func(ip1, ip2, text) {  
	oip1 := StrSplit(ip1, "."), nip1 := "0x", oip2 := StrSplit(ip2, "."), nip2 :="0x" 
	Loop 4
		nip1 .= Format("{:02x}", oip1[A_Index]), nip2 .= Format("{:02x}", oip2[A_Index])
	Loop % nip2 - nip1 + 1 
	{
		ip := ((0xff000000 & (n := nip1 + A_Index - 1)) >> 24) "." 
		. ((0x00ff0000 & n) >> 16) "." ((0x0000ff00 & n) >> 8) "." (0x000000ff & n)
		SendInput {Raw}%text%%ip%
		Sleep 10
		SendInput {Enter} 
		Sleep 10
	}
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov
а сейчас скрипт выдает вот такой результат:

http://zabanmenyzpolnostyu/user_ban?=82.145.223.221
http://zabanmenyzpolnostyu/user_ban?=82.145.223.222
http://zabanmenyzpolnostyu/user_ban?=82.145.223.223
http://zabanmenyzpolnostyu/user_ban?=82.145.223.224
http://zabanmenyzpolnostyu/user_ban?=82.145.223.225

и всё.

Я только добавил запуск по F1, т.к. иначе нет возможности запустить скрипт в текстовом документе:


#SingleInstance Force
#NoEnv 
SetKeyDelay, 20
F1::
ip1 = 82.145.223.221
ip2 = 82.145.223.225
longtext := "http://zabanmenyzpolnostyu/user_ban?="

Func(ip1, ip2, longtext)

Func(ip1, ip2, text) {  
	oip1 := StrSplit(ip1, "."), nip1 := "0x", oip2 := StrSplit(ip2, "."), nip2 :="0x" 
	Loop 4
		nip1 .= Format("{:x}", oip1[A_Index]), nip2 .= Format("{:x}", oip2[A_Index])
	Loop % nip2 - nip1 + 1 
	{
		ip := ((0xff000000 & (n := nip1 + A_Index - 1)) >> 24) "." 
		. ((0x00ff0000 & n) >> 16) "." ((0x0000ff00 & n) >> 8) "." (0x000000ff & n)
		SendInput {Raw}%text%%ip%
		Sleep 10
		SendInput {Enter} 
		Sleep 10
	}
}

22

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

То есть вы самостоятельно не можете поменять адреса, и просите помощи?

ip1 = 82.145.223.221
ip2 = 82.145.223.225
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23 (изменено: sn_ud, 2016-05-29 18:40:48)

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov
упс ))) Прошу прощения ) Я не посмотрел, что это не тот диапазон, который я давал в начале. Всё работает, это я туплю.
Спасибо за помощь )


Осталось теперь чисто для себя разобраться, как довести до совершенства пример скрипта в посте 6. Сейчас займусь.

24

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

serzh82saratov

таки нашелся баг: если я вбиваю другой диапазон, получаю на выходе совсем не то что надо:
например, вбиваю
ip1 = 192.168.1.1
ip2 = 192.168.1.10
а скрипт выдает:

http://zabanmenyzpolnostyu/user_ban?=0.192.168.17
http://zabanmenyzpolnostyu/user_ban?=0.192.168.18
http://zabanmenyzpolnostyu/user_ban?=0.192.168.19
http://zabanmenyzpolnostyu/user_ban?=0.192.168.20
http://zabanmenyzpolnostyu/user_ban?=0.192.168.21
http://zabanmenyzpolnostyu/user_ban?=0.192.168.22
http://zabanmenyzpolnostyu/user_ban?=0.192.168.23
http://zabanmenyzpolnostyu/user_ban?=0.192.168.24
http://zabanmenyzpolnostyu/user_ban?=0.192.168.25
http://zabanmenyzpolnostyu/user_ban?=0.192.168.26

25

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Ага, поправил 20 пост.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

26

Re: AHK: ввод диапазона ip адресов с нажатием ENTER после каждого ip

Теперь всё чётко. Еще раз спасибо!