Сегодня опять ковырял сокеты.
Написал себе малюсенький демон который давно хотел поиметь: функционально похож на так называемые
порт нокеры (port knocker daemon), но не юзает файерволл.
В конфиг файле прописываются протокол, номер порта, пароль, команда.
Демон считывает конфиг и начинает слушать на указанных портах. Как только на порт приходят какие-нибудь данные, он сравнивает их с паролем, и если пришедшие данные совпадают с паролем указанным в конфиге - демон выполняет команду.
Я на самом деле уже пытался написать его недели три-четыре назад, но зафейлил. Я вообще заметил что у меня какая-то тяга усложнять все. Придумываю какие-то слишком мудреные структуры, когда можно было бы каким-нибудь там массивом простым обойтись, потом сам же в них запутываюсь. Пытаюсь отучиться.
Но в этот раз получилось неплохо, и код довольно таки читабельный, можно продолжать добавлять фичи. Ну или начать добавлять фичи, потому что сейчас это просто голый демон с самым базовым функционалом.
Можно допустим добавить, типа не по паролю, а по последовательности подключений к определенным портам будет выполнятся команда и т.д.
Блджад, думал по-онглицке сбоку написать, но сил нету. Вот так дашь себе один раз расслабится и все =(
Конфиг файл выглядит так:
# magicword example configuration file.
#
# Copy it to /etc/magicword.conf and modify
# to suit your needs.
#
# Format:
#
# PROTO:PORT:PASSWORD:COMMAND
#
# Where PROTO is either "tcp", either "udp", PORT is the port
# to listen on, PASSWORD is the string, which if received on this port
# will trigger the execurtion of COMMAND.
#
# Note:
# No spaces allowed between ":" and field content.
#
tcp:2299:please:echo "tcp connect, passwd correct"
udp:9922:please:echo "udp connect, passwd correct"
Чист-теоретически, должна без проблем скомпилится на любом UNIX'е или клоне.
magicword.tar.gz (5 KB) Олсо, нашел очень даже нелохой туториал начального уровня по сокетам:
http://analyser.oli.tudelft.nl/beej/mirror/net/html/.
Если заюзать его вместе с
главой FreeBSD'шного Developer's Manual, посвященной сокетам - то вполне можно сносно научится их кодить.
Блджад, завтра надо доделать сделать курсовик по программированию. Типа софтвар для менеджмента базы данных клиентов оператора кабельного телевидения. Не сказал бы что мне особо интересно кодить что-то такое.