|
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 15
|
||||||
Выполнение и считывание popen команды ipfw в FreeBSD21.03.2011, 02:17. Показов 9553. Ответов 18
Метки нет (Все метки)
Доброго времени суток!
задачка такая: есть система FreeBSD, на ней фаервол ipfw. Нужно взять ип адрес, и проверить есть ли он в таблице правил, если да то удалить, если нет то пройти далее; написал:
как исправить? не юзать grep? он не возвращает пустую строку и не зануляеться буфер?
0
|
||||||
| 21.03.2011, 02:17 | |
|
Ответы с готовыми решениями:
18
настройка ipfw на freebsd 8.0 Freebsd NATD IPFW Настройка прозрачного прокси (squid, ipfw) на FreeBSD 9.2 |
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||||||||||||||||||||
| 21.03.2011, 04:17 | ||||||||||||||||||||||||||
Сообщение было отмечено Памирыч как решение
Решение
man popen
0
|
||||||||||||||||||||||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||
| 21.03.2011, 09:07 | ||
|
to ТС: как вариант, запускайте grep -q и проверяйте статус. А что будет если в таблице есть 1.2.3.0/24 а проверить нужно 1.2.3.4? С ipfw работать не приходилось, но по аналогии с pf там скорее всего есть свой развесистый API через get/set sockopt() для манипуляций правилами и таблицами.
1
|
||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||||||
| 21.03.2011, 09:53 | ||||||||||||
0
|
||||||||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 21.03.2011, 10:29 | |
|
В смысле другое?
Статус реально 8битный - что именно лежит в старшем байте я признаться не в курсе, да и врядли это как-то стандартизировано. Последний пример не корректен. Точнее корректен, но показывает именно ошибку. Нет времени копать доки или исходники, но готов держать пари: 0xd у sh наверняка not found. Попробуйте запустить /bin/echo или передать ключ -с шеллу
1
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||||||||||||
| 21.03.2011, 10:54 | ||||||||||||||||||
Сообщение было отмечено Памирыч как решение
Решение
Добавлено через 2 минуты
0
|
||||||||||||||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 21.03.2011, 10:55 | |
|
Значит не угадал я)
А если по уму сделать через макросы? #include <sys/wait.h> status = pclose(ifp); if (status != -1 && WIFEXITED(status)) printf("%x\n", WEXITSTATUS(status));
1
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||||||||||||||||||||
| 21.03.2011, 11:07 | ||||||||||||||||||||||||||
Сообщение было отмечено Памирыч как решение
Решение
printf("status: %d\n", WIFEXITED(status)); даёт ноль на /bin/echo x
1
|
||||||||||||||||||||||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 21.03.2011, 11:26 | |
|
"Нормально завершился" это всего лишь выход через exit(3) или _exit(2). В смысле от кода возврата никак не зависит.
2
|
|
|
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 15
|
||||||
| 21.03.2011, 15:10 [ТС] | ||||||
|
спасибо за советы
следуя примеру, просто проверил статус, если grep находит ип, то статус равен нулю, если же нет, то статус равен чему-то другому, восновном там константа 0х100 вроде получился рабочий код, може добавить еще какие-то проверки?
п.с. может это варварство каждый раз дергать с таблицы грепом ип, но другого способа не придумал, может подкинет кто идею?
0
|
||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||
| 21.03.2011, 15:45 | ||
|
Что касается идеи: если в процессе работы программы есть гарантия, что никто не изменит эту таблицу, то можно сделать popen("ipfw table 1 list",), прочитать и сохранить вывод, а дальше парсить ручками без грепа. Но совсем правильно будет как-то так: есть структура описывающая таблицу ipfw_table (netinet/ip_fw.h) есть две "опции" для getsockopt() IP_FW_TABLE_GETSIZE - вернет количество записей в таблице и IP_FW_TABLE_LIST - вернет содержимое таблицы (память нужно выделить на всю таблицу целиком + размер самой структуры ipfw_table), а пробежаться по массиву адресов и сравнить с нужным уже не сложно. Код можно выдрать из самой ipfw
2
|
||
|
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 15
|
|
| 22.03.2011, 12:30 [ТС] | |
|
спасибо, разобрался. Думаю пока буду использовать popen напрямую с ipfw, так как объем данных небольшой;
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||||||
| 22.03.2011, 13:52 | ||||||
|
Может оно и правильно)
Держите, вдруг пригодиться...
2
|
||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 24.03.2011, 09:32 | |
|
oh.ua, вчера посмотрел сырцы ipfw более внимательно.
Проверка "а есть ли такой адрес в таблице" там отсутствует - ipfw table n add/del x.x.x.x сразу пытается добавить/удалить адрес из таблицы, думаю вы можете сделать так же...
1
|
|
|
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 15
|
|
| 29.03.2011, 20:08 [ТС] | |
|
g_u_e_s_t, только вот если удалять ип с таблицы, а ее там нет , то в ответ в консоль выкидывает сообщение что "ipfw: setsockopt(IP_FW_TABLE_DEL): No such process", да и смысл удалят то, чего нет, лутче как-то проверить. Думаю это надо делать на уровне выше, например ставить какието флажки, был ли добавлен адрес в такую-то таблицу, чтоб потом точно оттуда удалить его без проверки grep-ом и т.п.
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 29.03.2011, 23:03 | |
|
Так это именно по тому, что сам ipfw этого не проверяет, такая проверка происходит уже непосредственно в ядре. Соответственно ваш grep или код который я приводил для замены попросту избыточен.
В общем ваша задача сводится к одному вызову socket() на запуск и к одному setsockopt() на каждый удаляемый адрес или если больше нравиться плодить процессы (2 на каждый удаляемый адрес), то можно запускать ipfw с stderr перенаправленным в /dev/null.
1
|
|
|
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 15
|
|
| 30.03.2011, 01:24 [ТС] | |
|
g_u_e_s_t, можно пример маленький? а то чтото пока не могу сообразить
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||||||||||||||||||||
| 30.03.2011, 04:07 | ||||||||||||||||||||||||||
|
https://www.cyberforum.ru/post1474375.html
ошибка
эта правильная
если не прочитать хотя бы один символ из открытого потока, то сбоит
0
|
||||||||||||||||||||||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||||||
| 30.03.2011, 10:30 | |||||||
2
|
|||||||
| 30.03.2011, 10:30 | |
|
Помогаю со студенческими работами здесь
19
ipfw в pfsense (freebsd с веб мордой) из командной строки Команды в ipfw
После команды start батник прекращает выполнение. Как запустить 2 команды start? выполнение команды Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|