Perl, 92
$_='use I;$h=shift;grep I->new("$h:$_"),shift..shift';
s/I/IO::Socket::INET/g;@_=eval;say"@_"
Perl 5.10 o posterior, ejecuta con perl -E 'code here'.
Utiliza expresiones regulares para comprimir tanto tiempo IO::Socket::INET, entonces eval; formateo final realizado con interpolación de matriz.
Por solicitud, una explicación más detallada. Para ungolf, primero volvamos a espacio:
$_ = << 'EOC';
use I;
$h = shift;
grep I->new("$h:$_"), shift..shift;
EOC
s/I/IO::Socket::INET/g;
@_ = eval;
say "@_";
La línea antes del evalreemplaza todas las (dos) ocurrencias de 'I' con 'IO :: Socket :: INET', ese es un truco de golf Perl estándar para reducir el impacto de los identificadores largos inevitables. Al nombrar algunos de los temporales, el código es equivalente a esto:
use IO::Socket::INET;
$h = shift;
$p1 = shift;
$p2 = shift;
@_ = grep IO::Socket::INET->new("$h:$_"), ($p1 .. $p2);
say "@_";
En pocas palabras: lea los argumentos de host y rango de puertos desde la línea de comandos; intenta una conexión con todos ellos en secuencia ( IO::Socket::INET->new()); mantener una lista de los que tuvieron éxito ( grep); muestra el resultado muy bien ( say).