LINUX.ORG.RU
ФорумAdmin

хостинг + bash + netcat. Как узнать IP пришедшего пакета UDP?

 , , ,


0

3

На хостинге крутится скрипт под bash, в котором утилитой nc принимаются пакеты UDP. Есть ли способ узнать с какого IP прислан пакет? IP нужно знать, чтобы отправить туда в ответ квитанцию или команду. С ключом -v для nc ничего не меняется, из nc вываливается только сам пакет. Запуск nc c "-v 2>&1" ничего не дал. Разные демоны и перехватчики пакетов типа tcpdump, наверное, хостер не даст установить. Никаких команд ifconfig, ip, ss, по видимому хостер не дал. Единственный вариант, который пришёл в голову, чтобы устройства, присылающие пакеты, в сам пакет вкладывали свой IP и порт. netstat не показывает ip последнего пришедшего пакета, по крайней мере я такого в его ответах не нашёл.

Перемещено beastie из general

Ответ на: комментарий от alozovskoy

Вызываю «nc -ul 27050 -v 1>zxc.txt 2>err.txt». В zxc пакеты падают, в err ничего.

caferacer ()
Ответ на: комментарий от caferacer

Да, эти сообщения пишутся в stderr. На счет хостера ничего сказать не могу (но зачем бы это ему), у меня:

$ nc --version
netcat (The GNU Netcat) 0.7.1
Copyright (C) 2002 - 2003  Giovanni Giacobbi
alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

а у меня:

$ nc --version nc: unrecognized option `--version' usage: nc [-46DdEhklnrStUuvz] [-e policy] [-I length] [-i interval] [-O length] [-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS] [-V fib] [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [hostname] [port]

$ nc -version usage: nc [-46DdEhklnrStUuvz] [-e policy] [-I length] [-i interval] [-O length] [-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS] [-V fib] [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [hostname] [port]

caferacer ()

Какой конкретно хостинг? его сайт в студию. интересно посмотреть набор услуг и цены.

anonymous ()
Ответ на: комментарий от anonymous

Это nic.ru. Тариф 202. Оболочка при доступе по ssh и для запуска скрипта выбрана bash. Ещё можно выбрать оболочки tcsh, csh и sh.

caferacer ()
Ответ на: комментарий от alozovskoy

BASH_VERSION='4.2.50(1)-release'

$ uname FreeBSD

uname -a FreeBSD web1126.nic.ru 8.1-RELEASE FreeBSD 8.3-RELEASE-p4 #4: Thu Jan 30 00:00:49 MSK 2014

caferacer ()
Ответ на: комментарий от caferacer

Как работать с fbsd-шным nc на самом деле непонятно, но в портах у них есть оригинальный netcat (и, по моему, бинарник так и называется - netcat).
Проверь, может он уже там стоит (bash-то там из портов), а если нет - попроси хостера поставить.
Только учти, ключи и параметры у них существенно различаются.

ABW ★★★★★ ()

Не знаю, поможет или нет... С tcp работало.

Из xinetd запускал по приходу tcp-запроса обработчик на перле. Он получал на stdin сообщение, а адрес отправителя получал вот так:

$clientsock= getpeername(STDIN);
($port,$iaddr)=sockaddr_in($clientsock);
$clientaddr=inet_ntoa($iaddr);

Вот не знаю, сработает ли это на udp.

anto215 ★★ ()
Ответ на: комментарий от anto215

В итоге переписал свою утилиту на PHP. Работаю с UDP-трафиком при помощи функций socket_create(), socket_bind(), socket_recvfrom(), socket_sendto(). Пока у меня мало внешних устройств, PHP прокатит.

Однако, эти функции распознаются при выполнении скрипта, только если он запускается из cron, и по-видимому, исполняется модулем PHP из apache. Если запускать скрипт из bash, написав php имя_скрипта, то выдаётся ошибка, что эти функции «unknown». По-видимому, при этом скрипт исполняется в режиме CGI. Может быть в этих вариантах запуска используются разные файлы php.ini, не знаю.

На форуме fbsd сказали, что указанная версия fbsd не поддерживается, и пусть хостер делает апгрэйд. Ещё порекомендовали написать всё на Си, но у меня компилятора нет.

caferacer ()
Ответ на: комментарий от caferacer

Так что у вас там есть, то? Вы молчите как партизан. Если есть perl пишите на perl, здоровее будете. Есть рут, есть порты - пересоберите php с поддержкой cli. Нет конпилятора, поставьте дома в виртуалку freebsd и конпелируейте все что хотите.

hizel ★★★★★ ()
Ответ на: комментарий от hizel

Если есть perl пишите на perl, здоровее будете.
Есть рут, есть порты - пересоберите php с поддержкой cli.
Нет конпилятора, поставьте дома в виртуалку freebsd и конпелируейте все что хотите.

Это всё слишком сложно. Я по-жизни микроконтроллеры программирую, просто на Си. Полез делать сервер для GPS-маяков по необходимости. На изучение моря программных инструментов времени нет, двигаюсь по пути наименьшего сопротивления :)

Так что у вас там есть, то? Вы молчите как партизан.

Хостер мне не даёт ничего. Хостер мне даёт папку, куда я могу положить свои интерент-странички, чтобы apach хостера их крутил. Все. Ещё я могу залезть в эту папку по ssh+bash. Всё. Никакого доступа к файлам системы. apach могу покрутить через интерфейс хостера. Ещё база данных есть, mysql.

caferacer ()
Ответ на: комментарий от caferacer

Есть такие штуки, VPS называются, на них можно как угодно крутить системой и писать программы под них хоть на том же си.

PolarFox ★★★★★ ()
Ответ на: комментарий от PolarFox

Ну да, я посмотрел, у моего хостера VDS от 500 руб. в месяц. Но это, опять же, всё потом. Сейчас мне надо отладить алгоритм взаимодействия между составными частями системы.

caferacer ()
Ответ на: комментарий от caferacer

Вместо того чтобы спокойно отлаживать алгоритм вы кувыркаетесь с ограничениями хостера, это путь наименьшего сопротивления? Возьмите обычную виртуалку и экспериментируйте, только боже вас упаси писать на bash.

hizel ★★★★★ ()
Ответ на: комментарий от hizel

На данный момент я уже переписал всё на PHP и сейчас принципиальных проблем не испытываю.

А с bash что не так?

caferacer ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.