Протестируйте подключение к хостам в файле на порту 22 с помощью команды curl

Об IP-адресах полезно помнить, что они на самом деле просто представления 32-битного числа.

Таким образом, вы можете преобразовать их в десятичное число, умножив октеты на 256.

Например:

217.29.0.0 == 216 * 256 ^ 3 + 29 * 256 ^2 + 0 * 256 ^1 + 0 * 256 ^ 0
           == 3640655872

Итак, учитывая диапазон, подобный приведенному выше - сначала преобразуйте их оба, чтобы получить начало и конец . Затем сравните все входящие IP-адреса, чтобы убедиться, что они «подходят».

Примерно так (иллюстрирующий алгоритм):

#!/usr/bin/env perl
use strict;
use warnings;

my $ip_to_check = "204.12.5.10";
my $dword       = 0;
for ( split( '\.', $ip_to_check ) ) { $dword *= 256; $dword += $_ }
print "Checking $dword\n";

while (<DATA>) {
    my ( $start, $finish ) = m/([\d\.]+)/g;
    my $start_dword = 0;
    for ( split '\.', $start ) { $start_dword *= 256; $start_dword += $_ }
    my $end_dword = 0;
    for ( split '\.', $finish ) { $end_dword *= 256; $end_dword += $_ }
    print "Range:\n";
    print "\t$start \t=> $start_dword\n";
    print "\t$finish \t=> $end_dword\n";

    print "$ip_to_check is in $_\n" if $dword >= $start_dword and $dword <= $end_dword;
}

__DATA__
"217.29.0.0-217.29.255.255",
"204.12.0.0-204.12.255.255",
"198.54.223.0-198.54.223.255",

Это можно легко сделать как «сценарий проверки» - прочитав файл (а не DATA ) и получив $ ip_to_check из STDIN ).

(примечание - поскольку чистый perl может быть довольно легко превращен в однострочник или скрипт для вызова. Или переписан - я полагаю, вы могли бы сделать это с помощью expr достаточно легко).

3
21.06.2018, 21:44
2 ответа

Использование встроенной функции bash для проверки открытых портов также может работать:

#!/bin/bash

host_file=/path/to/file.txt
out_file=/path/to/out.txt

while read -r ip; do
    if timeout 5 bash -c "cat < /dev/null >/dev/tcp/${ip}/22"; then
        echo -e "${ip}\tSuccess"
    else
        echo -e "${ip}\tFailure" 
    fi >> "$out_file"
done < "$host_file"
3
27.01.2020, 21:12

У меня пока недостаточно репутации, чтобы прокомментировать сообщение о том, что curl не предназначен для ssh или telnet. Это не точно. Curl поддерживает множество протоколов, включая telnet, ssh, scp, sftp, ftps и другие.

Это правильный синтаксис для curl:

curl -v telnet://127.0.0.1:22
3
27.01.2020, 21:12

Теги

Похожие вопросы