
На самом деле я хочу сделать что-то вродеifconfig.meфункциональность, но только для моей внутренней сети. Я вижу это так, как что-то на сервере слушает какой-то порт и отправляет ip подключенной удаленной машины.
Кажется, nc
это отличная утилита для решения моей проблемы (к тому же у меня на сервере нет никаких PHP/Python/чего-либо еще. Только оболочка и стандартные инструменты Unix).
Я вижу удаленный IP-адрес и DNS-имя, если запускаю nc -vv
и подключаюсь к нему с удаленной системы, но не могу найти способ отправить их на удаленный хост.
Или, может быть, я выбрал слишком странный путь и есть другое, более простое решение?
решение1
Вы можете использовать что-то вроде этого:
while true; do nc -lvp 1337 -c "echo -n 'Your IP is: '; grep connect my.ip | cut -d'[' -f 3 | cut -d']' -f 1" 2> my.ip; done
nc
будет выполнен в бесконечном цикле прослушивания порта 1337
с подробным параметром, который запишет информацию об удаленном хосте в stderr
. stderr
перенаправляется в файл my.ip
. Параметр -c
for nc
позволяет выполнить что-то для "обработки" соединения. В этом случае мы затем выполним grep для IP-адреса из my.ip
файла.
pbm@lantea:~$ curl http://tauri:1337
Your IP is: 192.168.0.100
решение2
while true; do nc -l -v 3333 2> status | while read msg; do ip=$(cat status | grep -o -P '(?<=from).*(?=port)') && notify-send "$ip" "$msg" -i gtk-network; done ; done
Перенаправитьstderrв файл под названиемположение дел; затем считывает IP-адрес удаленного коннектора из файла; наконец, отображает IP-адрес в сообщении notify-osd.
Примечание:
когда кто-то подключается к тому же порту с другого компьютеранкобычно помещает это в stderr: connection from 10.10.0.1 port 3333 [tcp/*] accepted
. Я просто извлекаю IP-адрес, используягрэп.