Может быть напишет кто плагин для рабоыт с сокетами???
желательно сделать так же как у мирки, её функционала вполне хватает. [pwn]
Сокеты
Вы можете создавать свои raw сокеты для приема и передачи информации. Для этого вы должны хорошо понимать, как работают Алиасы, Всплывающие меню, и Скрипты.
Сокеты – ограничены в ресурсах и поэтому внимательно прочитайте все, что написано ниже перед тем, как начать использовать их. Не забывайте закрывать сокеты после окончания работы с ними.
-------------------------------------------------------------------------------
Идентификаторы сокетов
$sock(name,N)
Возвращает информацию об открытом командой sockopen сокете.
Свойства: name, ip, addr, port, status, sent, rcvd, sq, rq, ls, lr, mark, type, saddr, sport, to, wserr, wsmsg, bindip, bindport, ssl, pause
.name имя соединения.
.addr начальный адрес с именем, если был использован.
.sent и .rcvd количество переданных/полученных байтов через соединение.
.sq и .rq количество байтов в буферах приема или передачи.
.ls и .lr время, прошедшее с момента последнего приема или передачи.
.mark область для комментария пользователя max. 512 байт (см. /sockmark).
.type тип сокета, TCP или UDP.
.saddr и .sport адрес и порт последнего полученного UDP пакета.
.to возвращает в секундах, сколько был открыт сокет.
.wserr возвращает последний номер ошибки winsock которая возникла в сокете.
.wsmsg возвращает сообщение о последней ошибке winsock подходящее номеру ошибки.
.ssl возвращает $true для SSL соединения
.pause возвращает $true, если сокет был приостановлен
Примечание: Вы можете использовать шаблоны в имени сокета. Параметр N не обязателен, по умолчанию 1.
$sockname
Имя соединения. Идентификатор может быть для идентификации соединения, вызвавшего обработчик события..
$sockerr
Значение $sockerr (код ошибки) устанавливается после каждой команды для сокета.
$sockbr
Значение $sockbr устанавливается после выполнения команды /sockread. Содержит количество прочитанных байтов.
$portfree(N)
Возвращает $true если указанный порт не используется, в противном случае $false.
--------------------------------------------------------------------------------
Команды сокетов и обработчики событий
Прослушивание подключений
/socklisten [-d] [bindip] <name> [port]
Команда /socklisten ожидает подключения(listen) к указанному порту. Если порт не указан, он выбирается случайно. Диапазон доступных портов назначается в DCC Options.
Опция -d указывает что вы определили ip адрес как bind адрес.
on 1:socklisten:name:commands
Обработчик socklisten вызывается, когда кто-то пытается подключиться к прослушиваемому порту. Для создания соединения вы должны дать команду /sockaccept, в противном случае соединение будет закрыто.
/sockaccept <name>
Команда создает соединение в ответ на запрос и присваивает ему имя name.
/sockrename <name> <newname>
Переименование существующего соединения.
Открытие и закрытие подключений
/sockopen [-de] [bindip] <name> <address> <port>
Команда /sockopen создает соединение с указанным адресом и портом. Вы можете указывать как ip адрес, так и named адрес (который будет преобразован в ip).
Опция -d указывает что вы определили ip адрес как bind адрес
Опция -e создает SSL соединение.
on 1:sockopen:name:commands
Обработчик вызывается, когда соединение установлено.
/sockclose <name>
Команда /sockclose закрывает соединение с указанным именем. Можно использовать шаблон для имени, тогда будут закрыты все найденные соединения.
on 1:sockclose:name:commands
Обработчик вызывается, когда соединение закрыто со стороны удаленного клиента.
Передача информации
/sockwrite [-tnb] <name> [numbytes] <text|%var|&binvar>
Команда /sockwrite предназначена для передачи данных в очередь указанного соединение. После передачи данных вызывается обработчик sockwrite.
Опция -t заставляет mIRC послать данные, начинающиеся с & как текст (не интерпретировать как бинарную переменную).
Опция -n добавляет символы $CRLF к строке, если это не переменная &binvar и если символов $CRLF нет в строке.
Опция -b указывает, что вы определили значение numbytes (количество байт для передачи).
Примечание: Вы можете использовать шаблон для имени соединения для передачи данных нескольким соединениям.
При ошибке: Если возникает ошибка при выполнении команды /sockwrite, идентификатор $sock().wserr возвращает значение ошибки и запускает событие on sockwrite с определенным идентификатором $sockerr.
on 1:sockwrite:name:commands
Обработчик вызывается, когда mIRC закончил передачу данных, поставленных в очередь, или когда сокет готов для дальнейшей передачи.
Примечание: Если буфер передачи соединения не пуст, следующая команда /sockwrite просто добавит данные в буфер. Максимальный размер буфера 16384 байт, поэтому перед записью рекомендуется проверять буфер идентификатором $sock().sq.
Прием информации
on 1:sockread:name:commands
Обработчик вызывается, когда в буфере приема есть данные от удаленного клиента. Прочитать данные можно командой /sockread.
Примечание: Если обработчик был вызван, но данные не получены командой /sockread, это значит, что скрипт, обрабатывающий этот буфер, не существует и буфер будет очищен, а данные потеряны.
/sockread [-fn] [numbytes] <%var|&binvar>
Команда /sockread читает данные из буфера приема в указанную переменную.
Если указать переменную %var, строка текста, оканчивающаяся на $crlf будет сохранена в этой переменной. Символы $crlf отбрасываются. Если строка состояла только из символов $crlf, значение %var будет $null.
Если указана переменная &binvar и значение [numbytes] (размер блока данных), то информация будет сохранена в этой переменной. Если не указано значение [numbytes], по умолчанию принимается 4096.
Опция -f совместно с переменной %var заставляет mIRC заполнить переменную %var любым текстом из буфера приема, даже если он не заканчивается на $crlf.
Опция -n позволит прочитать строку, оканчивающуюся на $crlf в переменную &binvar. Если строка на заканчивается на $crlf, данные не будут сохранены в &binvar до тех пор, пока вы не укажете опцию -f.
Примечание: одиночной команды /sockread может не хватить для прочтения всего буфера данных. Вы должны продолжать чтение в цикле, значение идентификатора $sockbr не станет равным нулю. Это гораздо быстрее, чем снова ожидать вызов обработчика. Если ваш скрипт не прочитал все содержимое буфера, то обработчик вызовется еще раз в случае:
a) вы читаете в переменную &binvar.
b) вы читаете в переменную %var и в буфере остались строки, оканчивающиеся на $crlf.
Пример:
Этот пример показывает, как вы должны обрабатывать событие sockread. Предполагается, что сокет уже открыт и в буфере приема есть информация. Имя сокета - testing. Далее дается описание каждого шага в этом простеньком скрипте.
on 1:sockread:testing:{
if ($sockerr > 0) return
:nextread
sockread %temp
if ($sockbr == 0) return
if (%temp == $null) %temp = -
echo 4 %temp
goto nextread
}
Если $sockerr больше нуля, то есть ошибка. mIRC автоматически закроет сокет и остановит обработчик.
sockread %temp читает строку, оканчивающуюся на CRLF в переменную %temp. Если строка не содержит CRLF, переменная %temp не заполнится данными и $sockbr вернет ноль, т.е. вам следует возвращать событие без дальнейшей обработки.
Если %temp равно $null, значит в строке были только символы CRLF, которые mIRC автоматически зачистил, так что только остались пустые линии. В нашем случае переменной %temp присваивается значение "-", но вы можете делать что угодно с ней.
Команда echo выводит результат в окно статуса.
Команда goto: снова читаем буфер принятых данных.
Приостановка приема информации
/sockpause [-r] <name>
Команда /sockpause приостанавливает/рестартит прием данных из открытого сокета.
Опция -r рестартит прием данных.
Метка сокета
/sockmark <name> [text]
Команда /sockmark заполняет атрибут .mark сокета указанной информацией для последующего обращения к ней через $sock().mark. Если текст не указан, метка очищается. Максимальный размер - 512 байт.
Примечание: Можно использовать шаблон имени сокета для записи одинаковой информации в несколько сокетов.
Список открытых сокетов
/socklist [-tul] [name]
Команда /socklist показывает весь список открытых сокетов, или если вы определите опции -tul, оно покажет списки tcp, udp и прослушиваемых сокетов соответственно. Также вы можете указать имя сокета или шаблон.
--------------------------------------------------------------------------------
UDP сокеты
UDP - протокол без соединения, т.е вы можете посылать информацию через UDP без создания соединения.
UDP не гарантирует доставку информации, т.е. это не надежный протокол. Также UDP пакеты не обязательно придут в той последовательности, в которой вы их отправили. Весь контроль за передачей данных возложен на вас...
/sockudp [-bntkd] [bindip] <name> [port] <ipaddress> <port> [numbytes] [text|%var|&binvar]
Опция -t заставляет mIRC послать данные, начинающиеся с & как текст (не интерпретировать как переменную).
Опция -n добавляет символы $crlf к строке, если это не переменная &binvar и если символов $crlf нет в строке.
Опция -b указывает, что вы определили значение numbytes (количество байт для передачи).
Опция -k оставляет сокет открытым, что позволит слушать данные, поступающие в этот порт через UDP. Если опция не указана, сокет закрывается после передачи данных.
Опция -d указывает что вы определили ip адрес как bind адрес.
Если имя сокета не существует, сокет будет создан. Если же оно существует, сокет будет использован для отсылки данных.
Если не определен номер порта, если он не указан mIRC выбирает его случайно.
ipaddress и port - адрес, куда посылается пакет. Можно указывать только IP адрес (ххх.ххх.ххх.ххх).
При ошибке: Если возникает ошибка при выполнении команды /sockudp, идентификатор $sock().wserr возвращает значение ошибки и запускает событие on sockwrite с определенным идентификатором $sockerr.
on 1:udpread:name:commands
Обработчик вызывается, когда данные поступают в буфер приема. Прочитать данные можно командой /sockread.
Примечание: Если обработчик был вызван, но данные не получены командой /sockread, буфер будет очищен и данные будут потеряны.
[/pwn]