LINUX.ORG.RU

История изменений

Исправление gh0stwizard, (текущая версия) :

#!perl

use strict;
use warnings;
use Socket;
use Carp qw(croak);

my $port = shift || 12345;
croak "invalid port" if $port !~ /^\d{1,5}$/;

my $proto = getprotobyname 'tcp';

socket( SERVFD, PF_INET, SOCK_STREAM, $proto )
  || croak "socket: $!";
setsockopt( SERVFD, SOL_SOCKET, SO_REUSEADDR, pack( "l", 1 ) )
  || croak "setsockopt: $!";
bind( SERVFD, sockaddr_in( $port, INADDR_ANY ) )
  || croak "bind: $!";
listen( SERVFD, SOMAXCONN )
  || croak "listen: $!";

while () {
  my $paddr = accept( CLIFD, SERVFD );
  my ( $port, $ip ) = sockaddr_in $paddr;
  printf "connection from %s\n", inet_ntoa( $ip );
  close CLIFD;
}

Исходная версия gh0stwizard, :

poc

#!perl

use strict;
use warnings;
use Socket;
use Carp qw(croak);

my $port = shift || 12345;
croak "invalid port" if $port !~ /^\d{1,5}$/;

my $proto = getprotobyname 'tcp';

socket SERVFD, PF_INET, SOCK_STREAM, $proto
  || croak "socket: $!";
setsockopt SERVFD, SOL_SOCKET, SO_REUSEADDR, pack( "l", 1 )
  || croak "setsockopt: $!";
bind SERVFD, sockaddr_in( $port, INADDR_ANY )
  || croak "bind: $!";
listen SERVFD, SOMAXCONN
  || croak "listen: $!";

while () {
  my $paddr = accept( CLIFD, SERVFD );
  my ( $port, $ip ) = sockaddr_in $paddr;
  printf "connection from %s\n", inet_ntoa( $ip );
  close CLIFD;
}