Perl, 92
$_='use I;$h=shift;grep I->new("$h:$_"),shift..shift';
s/I/IO::Socket::INET/g;@_=eval;say"@_"
Perl 5.10 ou posterior, execute com perl -E 'code here'.
Usos expressões regulares para comprimir tanto tempo IO::Socket::INET, então eval; formatação final feita com interpolação de matriz.
Por solicitação, uma explicação mais detalhada. Para ungolf, primeiro vamos redefinir o espaço:
$_ = << 'EOC';
use I;
$h = shift;
grep I->new("$h:$_"), shift..shift;
EOC
s/I/IO::Socket::INET/g;
@_ = eval;
say "@_";
A linha anterior à evalsubstitui todas as (duas) ocorrências de 'I' por 'IO :: Socket :: INET', que é um truque padrão de golfe Perl para reduzir o impacto de inevitáveis identificadores longos. Nomeando alguns dos temporários, o código é equivalente a isso:
use IO::Socket::INET;
$h = shift;
$p1 = shift;
$p2 = shift;
@_ = grep IO::Socket::INET->new("$h:$_"), ($p1 .. $p2);
say "@_";
Em poucas palavras: leia os argumentos do host e do intervalo de portas na linha de comando; tente uma conexão com todos eles em sequence ( IO::Socket::INET->new()); mantenha uma lista daqueles que conseguiram ( grep); exibir o resultado bem ( say).