Тем временем я придумал следующий подход:
noremap <script> <unique> <SID><\O> <Nop>
inoremap <script> <unique> <SID><\O> <C-\><C-O><SID><\O>
cnoremap <script> <unique> <SID><\O> <C-\><C-N><SID><\O>
noremap <script> <unique> <SID><\N> <Nop>
noremap! <script> <unique> <SID><\N> <C-\><C-N><SID><\N>
Для каждого режима Vim <SID><\O>
сочетание клавиш отображается для соответствующего выхода (например. <C-\><C-O>
) от текущего режима Vim (например, режим вставки) к его нормальному режиму. Правая сторона каждого отображения заканчивается в его левой стороне (например. <SID><\O>
) чтобы рекурсивно попытаться выйти снова. Локальное для сценария (<script>
, <SID>
) остановки рекурсии как скоро последняя последовательность клавиши выхода достигают нормального режима Vim в который <SID><\O>
сочетание клавиш ни на чем не отображается (<Nop>
).
Аналогично <SID><\N>
сочетание клавиш отображается на не, только выходят однажды (<SID><\O>
) от, например, режим вставки прежде, чем возвратиться назад, но постоянно остаются в нормальном режиме.
С помощью вышеупомянутых определений я отобразился <F1>
и <S-F1>
функциональные клавиши следующим образом:
noremap <script> <unique> <expr> <F1> <SID>ToggleHelp(':<C-U>help', '<SID>')
noremap! <script> <unique> <expr> <F1> <SID>ToggleHelp(':<C-U>help', '<SID>')
noremap <script> <unique> <expr> <S-F1> <SID>ToggleHelp(':<C-U>helpgrep', '<SID>')
noremap! <script> <unique> <expr> <S-F1> <SID>ToggleHelp(':<C-U>helpgrep', '<SID>')
function! s:ToggleHelp(cmd, sid)
ToggleVar s:HelpCwordOn
let a=s:HelpCwordOn ? '<cword>' : '<cWORD>'
return a:sid . '<\O>' . a:cmd . ' ' . expand(a) . ' '
endfunction
command! -bang -nargs=+ ToggleVar call <SID>ToggleVar(<bang>0, <f-args>)
function! s:ToggleVar(bang, var)
let {a:var}=exists(a:var) ? !{a:var} : !a:bang
endfunction
Вместо того, чтобы иметь <F1>
ключ просто открывает справку Vim's в новом окне, это запускается :help
команда с внутренним словом (<cword>
) под курсором. Последовательно нажимающим <F1>
ключ, каждый переключается на внешнее слово (<cWORD>
) и переключатели назад снова.
Эти 4 отображения от варианта использования выше могли также быть определены следующим образом для не повторения себя; т.е. хранение его "сохнет":
let a='noremap'
let b='<script> <unique> <expr>'
let c='<F1>'
let d='<S-F1>'
let e='<SID>ToggleHelp('':<C-U>help'
let f='grep'
let g=''', ''<SID>'')'
let h=b . ' ' . c . ' ' . e . g
let i=b . ' ' . d . ' ' . e . f . g
exec a . ' ' . h
exec a . '! ' . h
exec a . ' ' . i
exec a . '! ' . i
Если Вы предполагаете, что промежуточные блоки брандмауэра, можно протестировать соединение на командной строке:
netcat -u servername 1514
Теперь при вводе некоторого текста необходимо найти на серверной стороне OSSEC сообщение журнала как:
less /var/ossec/logs/ossec.log
2014/02/14 17:54:07 ossec-remoted(1403): ERROR: Incorrectly formated message from 'nn.nn.nn.nnn'.
Как Вы видите, я использую порт по умолчанию OSSEC 1514 для коммуникации. Так, действительно ли Вы уверены, что используете порт 514?
Для пошагового практического руководства, отлаживающего соединение OSSEC, можно взглянуть на мой блог, Как отладить соединение OSSEC.
Я встречал здесь и на других веб-сайтах вопросы, связанные с подключением OSSEC, но без подходящего ответа.
Проверяли ли вы журнал сервера, показывает ли он «Сообщение от w.x.y.z запрещено»? Это указывает (я думаю) на несоответствие IP-адреса. Сообщения от агента проходят, т.е. нет проблем с брандмауэром или NAT, но сервер их не принимает.
Несоответствие IP-адресов, по-видимому, происходит при указании подсети для агента; проблема не возникает с одним IP-адресом. Когда создается исполняемый файл агента, допустим, вы указываете адрес 10.1.20.0/24, потому что хост полагается на DHCP. Вы должны добавить в файл ossec.conf на сервере тег
:
<remote>
<connection>secure</connection>
<allowed-ips>10.1.20.0/24(<allowed-ips>
</remote>
Этот тег не создается по умолчанию, и добавление этого тега решает проблему. Вам необходимо перезапустить службу OSSEC.
Перейдите в каталог rids на затронутом хосте и удалите идентификатор этого хоста. Например, если идентификатор агента/клиента равен 17, то:
rm -rf /var/ossec/queue/rids/17
Затем перезапустите клиент:
service ossec-hids restart
Теперь проверьте статус сервера, теперь он будет активен.