Если у вас достаточно обновленные версии утилит GNU с -по -даты, вы можете настроить их на обработку данных с завершением NULL -. Это позволяет создавать конвейеры, на которые не влияют пробелы или символы новой строки в самих данных.
Мой тестовый инструмент — это быстрый скрипт под названием/tmp/args
:
#!/bin/bash
echo "This is args with $# value(s)"
for f in "$@"; do echo "> $f <"; done
Вот как вы можете передать ему серию имен файлов в командной строке, отсортированных по времени последнего изменения файла:
find -type f -printf "%T@ %p\0" | sort -zn | sed -z 's/^[0-9.]* //' | xargs -0 /tmp/args
Команда find
ставит перед каждым именем файла/пути представление в долях секунды даты/времени последнего изменения. Это обрабатывается sort
в порядке от самого низкого (самого старого )до самого высокого (самого нового ). sed
удаляет начальное число, которое мы только что использовали для сортировки, и результирующий набор имен файлов передается в xargs
. Замените %p
на %P
, если вы предпочитаете опускать начальный ./
в именах файлов.
Пример данных
# "c d" contains a space; "e f" contains a newline; "h" has leading whitespace
touch a 'e
f' g ' h ' 'c d' b
Пример результата
This is args with 6 value(s)
>./a <
>./e
f <
>./g <
>./ h <
>./c d <
>./b <
Если син-пакет является частью фактической попытки подключения, вы можете в нужный момент перечислить сокет и процесс с чем-то вроде:
netstat -apn | grep SYN_SENT
Это работает в Linux. Флаг -p
содержит имя процесса, которому принадлежит сокет. Вы можете уточнить/изменить условие grep
, чтобы получить именно ту строку, которая вам нужна.
Для MacOs вы можете сделать:
lsof -i -P | grep -i "SYN_SENT"
Возвращаясь к Linux, можно настроить сервер по этому адресу/порту, перенаправив его на локальный процесс:
# iptables -t nat -A OUTPUT -p tcp --dport 7000 -j DNAT --to-destination 127.0.0.1:7777
$ nc -l 7777
Теперь, когда соединение будет установлено, у вас будет больше времени для выполнения команды netstat -p...
до закрытия сокета.
netstat -apn | grep 7000
Кроме того, вы можете инициировать поток данных tcp по этому соединению, что позволит вам узнать больше о клиенте.
В Linux вы бы использовали ss
, но вы упомянули MacOS, а там наверняка netstat
. Обратите внимание, что вам может потребоваться запустить netstat
и lsof
от имени пользователя root, чтобы получить список всех сокетов.