Aparentemente, la marca de tiempo desql_runner.sh
(y los otros archivos )está entre 09 :26 :49.000 y 09 :26 :49.999; por lo tanto, es más nuevo que...49 pero no más nuevo que...50. Si desea dividir cabellos segundos, GNU find comparará las marcas de tiempo hasta el nanosegundo:
/* Returns ts1 - ts2 */
static double ts_difference (struct timespec ts1,
struct timespec ts2)
{
double d = difftime (ts1.tv_sec, ts2.tv_sec)
+ (1.0e-9 * (ts1.tv_nsec - ts2.tv_nsec));
return d;
}
static int
compare_ts (struct timespec ts1,
struct timespec ts2)
{
if ((ts1.tv_sec == ts2.tv_sec) &&
(ts1.tv_nsec == ts2.tv_nsec))
{
return 0;
}
else
{
double diff = ts_difference (ts1, ts2);
return diff < 0.0 ? -1 : +1;
}
}
Estuviste cerca con la sintaxis; use un punto para agregar los segundos fraccionarios, no otros dos puntos:
find./ -type f -newermt '2018-05-24 09:26:50.200'...
Используйте следующую простую команду:
$ getip(){ ping -c 1 -t 1 $1 | head -1 | cut -d ' ' -f 3 | tr -d '()' 2>&1 | tee >> /tmp/result.log & }
$ getip 'hostname.number1.net'
$ getip 'hostname.number2.net'
$ getip 'hostname.number3.net'
$ getip 'hostname.number4.net'
$ getip 'hostname.number5.net'
$ getip 'hostname.number6.net'
$ getip 'hostname.number7.net'
$ getip 'hostname.number8.net'
$ cat /tmp/result.log
ABC.DEF.GHI.XY1
ABC.DEF.GHI.XY2
ABC.DEF.GHI.XY3
ABC.DEF.GHI.XY4
ABC.DEF.GHI.XY5
ABC.DEF.GHI.XY6
ABC.DEF.GHI.XY7
ABC.DEF.GHI.XY8
Если вы посмотрите на проект NMAP , вы обнаружите, что он включает в себя дополнительные инструменты помимоnmap
. Одним из таких инструментов является nping
, который включает в себя следующую возможность:
Nping has a very flexible and powerful command-line interface that grants users full control over generated packets. Nping's features include:
- Custom TCP, UDP, ICMP and ARP packet generation.
- Support for multiple target host specification.
- Support for multiple target port specification.
- ...
nping
находится в стандартных репозиториях EPEL для загрузки.
$ repoquery -qlf nmap.x86_64 | grep nping
/usr/bin/nping
/usr/share/man/man1/nping.1.gz
Чтобы пропинговать несколько серверов, вам просто нужно указать nping
имена/IP-адреса и протокол, который вы хотите использовать. Здесь, поскольку мы хотим имитировать то, что делает традиционный ping
CLI, мы будем использовать ICMP.
$ sudo nping -c 2 --icmp scanme.nmap.org google.com
Starting Nping 0.7.70 ( https://nmap.org/nping ) at 2019-06-14 13:43 EDT
SENT (0.0088s) ICMP [10.3.144.95 > 45.33.32.156 Echo request (type=8/code=0) id=42074 seq=1] IP [ttl=64 id=57921 iplen=28 ]
RCVD (0.0950s) ICMP [45.33.32.156 > 10.3.144.95 Echo reply (type=0/code=0) id=42074 seq=1] IP [ttl=46 id=24195 iplen=28 ]
SENT (1.0091s) ICMP [10.3.144.95 > 45.33.32.156 Echo request (type=8/code=0) id=42074 seq=2] IP [ttl=64 id=57921 iplen=28 ]
SENT (2.0105s) ICMP [10.3.144.95 > 45.33.32.156 Echo request (type=8/code=0) id=42074 seq=2] IP [ttl=64 id=57921 iplen=28 ]
RCVD (2.0107s) ICMP [45.33.32.156 > 10.3.144.95 Echo reply (type=0/code=0) id=42074 seq=2] IP [ttl=46 id=24465 iplen=28 ]
SENT (3.0138s) ICMP [10.3.144.95 > 64.233.177.100 Echo request (type=8/code=0) id=49169 seq=2] IP [ttl=64 id=57921 iplen=28 ]
Statistics for host scanme.nmap.org (45.33.32.156):
| Probes Sent: 2 | Rcvd: 2 | Lost: 0 (0.00%)
|_ Max rtt: 86.053ms | Min rtt: 0.188ms | Avg rtt: 43.120ms
Statistics for host google.com (64.233.177.100):
| Probes Sent: 2 | Rcvd: 0 | Lost: 2 (100.00%)
|_ Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 4 (112B) | Rcvd: 2 (108B) | Lost: 2 (50.00%)
Nping done: 2 IP addresses pinged in 3.01 seconds
Единственным недостатком, который я обнаружил в этом инструменте, является использование режима ICMP, требующего привилегий суперпользователя.
$ nping -c 2 --icmp scanme.nmap.org google.com
Mode ICMP requires root privileges.
fping находится в одноименном пакете Fedora и позволяет использовать множество хостов или набор IP-адресов.
$ fping -a -A -c 1 hosta hostb
192.168.0.20 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.64/0.64/0.64
192.168.1.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.50/0.50/0.50
fping will send out a ping packet and move on to the next target in a round-robin fashion... if a target replies, it is noted and removed from the list
Ради развлечения и выгоды...
#!/bin/sh -
# sends six "pings" to a list of hosts defined in "hosts" below
hosts="
host.a
host.b
host.c
host.d
host.e
"
for p in $hosts
do
# ONLY CHOOSE ONE OF THE FOLLOWING, NOT BOTH
# dump results to file
ping -c 6 $p >>./PINGED
# dump output to console
ping -c 6 $p
done
exit
Это может быть легко улучшено. Что делает его довольно полезным.:)
Дополнительные параметры см. на справочных страницах для bsd ping и Linux ping
ХТХ
РЕДАКТИРОВАТЬ :немного изменено, чтобы завершить ping-запросы по 6 пингов каждый и добавить параметры справочной страницы.
Я не знаю, чего именно вы хотите, но вы можете изменить последние 8 бит -, установленные на десятичное число 255, чтобы ваши хосты получали широковещательную рассылку, на самом деле, они будут передавать пакеты ping всем устройствам, которые существуют в сети. сеть.
ping -c 1 xx.xx.xx.255
oping host1 host2 host3
oping uses ICMP packages (better known as "ping packets") to test the reachability of network hosts. It supports pinging multiple hosts in parallel using IPv4 and/or IPv6 transparently.
This package contains two command line applications: "oping" is a replacement for tools like ping(1), ping6(1) and fping(1). "noping" is an ncurses-based tool which displays statistics while pinging and highlights aberrant round-trip times.
Я полагаю, это может сделать для вас?
eval $(printf 'ping "%s" & ' host1 host2 host3)
Он использует способность printf
"автоматически -повторять" свои аргументы, в то время как re -использует свою строку формата для каждого аргумента. Таким образом, приведенный выше printf
создает последовательность строк ping <hostname> &
для каждого хоста, предоставленного в качестве аргумента, и передает такую последовательность команд через подстановку команд команде eval
для их немедленного выполнения.
printf
и eval
являются стандартом POSIX, как и подстановка команд.
Включение всей такой команды в подоболочку, содержащую и -ed wait
, как это:
(eval $(printf 'ping "%s" & ' host1 host2 host3) && wait)
дает возможность прерывать все по желанию простым Ctrl+C .
В противном случае вы можете управлять каждой ping
командой отдельно через обычное управление заданиями оболочки.
Если ваша оболочка также поддерживает замену процессов, вы также можете использовать следующее:
. <(printf 'ping "%s" & ' host1 host2 host3)
для ввода на несколько символов меньше.
Суть та же, что и для eval
, но последовательность ping
передается команде .
(, также известной как source
), через подстановку процесса.
ping google.com && ping localhost
Выход
Pinging google.com [xxxxxxx] with 32 bytes of data:
Reply from xxxxxxx: bytes=32 time=210ms TTL=49
Reply from ::1: time<1ms
Reply from xxxxxxx: bytes=32 time=212ms TTL=49
Reply from ::1: time<1ms
Reply from xxxxxxx: bytes=32 time=211ms TTL=49
Reply from ::1: time<1ms
Nmap поддерживает ping-сканирование (ICMP )и несколько хостов:
nmap -sn -n 127.0.0.1 8.8.8.8
Вы также можете создать файл, содержащий все ваши целевые IP-адреса (, разделенные пробелами или символами новой строки )с именем targets.txt
. Затем запустите:
nmap -sn -n -iL targets.txt
Описание вариантов:
-sn
Пинг-сканирование. -n
Отключить разрешение DNS. -iL
Введите имя файла. Другие интересные опции на случай, если вы хотите пропинговать действительно большое количество целей:
-T4
Увеличьте время, чтобы сократить продолжительность сканирования. --min-parallelism 100
Увеличьте количество параллельных датчиков. -oG <file>
Запись результатов сканирования в файл в формате Grepable. Имейте в виду, что вы также можете отказаться от создания файла и использовать -
для получения ввода либо из канала |
, либо с помощью традиционных методов перенаправления вывода через STDIN.
Примеры:
$ ( echo www.google.com; echo www.yahoo.com ) | sudo nmap -sn -n -iL -
-или-
$ sudo nmap -sn -n -iL - < <(echo www.google.com; echo www.yahoo.com)
-или-
$ sudo nmap -sn -n -iL - <<< $'www.google.com\nwww.yahoo.com'
Я бы предложил использовать GNU Parallel
parallel -u ping ::: host1 host2 host3
вывод будет чередоваться
Я знаю, что это конкретно не то, о чем вы просите, а bash-скрипт для выполнения этого:
#!/bin/bash
for host; do
ping -c5 "$host" 2>&1 | tail -3 &
done
wait
Это примет ваши конечные точки в качестве аргументов командной строки и отправит 5-кратный эхо-запрос на каждую из них в качестве фонового процесса, а затем дождется завершения всех перед выходом.Он напечатает последние три строки вывода ping, которые содержат полезную статистику об успешности и задержке.
С помощью общей команды xargs
для построения выполнения нескольких запросов ping
:
echo host1 host2 host3 | xargs -n1 -P0 ping -c 4
Где host1 host2 host3
может быть переменным количеством хостов (любая комбинация IP или имени хоста ).
Это изменяет xargs
значения по умолчанию, чтобы принудительно использовать 1 входной аргумент при выполнении команды ping и разрешать неограниченное количество параллельных дочерних процессов (1 на каждый проверяемый узел ). Вероятно, разумно установить-P
(или--max-procs
)на разумное значение, если вы намереваетесь пропинговать большое количество хостов (, все они будут обработаны; только меньше одновременно ).
Он достаточно короткий, чтобы его можно было использовать напрямую, его можно добавить как функцию в ваш профиль оболочки или rc-файл или превратить в крошечный скрипт в вашем $PATH
. В приведенных ниже примерах для параметра -P
установлено значение 10, чтобы избежать чрезмерного потребления ресурсов.
Пример сценария:/usr/bin/mping
#!/bin/sh
echo $@ | xargs -n1 -P10 ping -c4
Пример функции в~/.bashrc
function mping() {
echo $@ | xargs -n1 -P10 ping -c4
}
И использовать как:
mping host1 host2 host3...