Неизвестное имя хоста в Perl Socket - PullRequest
0 голосов
/ 10 мая 2019

Я написал пример кода сокета perl. Клиент и сервер работают на одном компьютере. В коде сервера при принятии клиентского соединения он отображает имя хоста клиента как «anates». Я не понимаю, откуда он выбирает это имя. Поскольку я нигде не установил это имя.

Server.pl

my $client_addr;
while ($client_addr = accept(NEW_SOCKET, SOCKET)) {
   # send them a message, close connection
   print("CCCCLLLII : $client_addr\n");
   my($port2, $iaddr) = sockaddr_in($client_addr);
   print("$port2\n");
   print("$iaddr\n");
   $iaddr = inet_ntoa($iaddr);
   print("$iaddr\n");

   my $name = gethostbyaddr($client_addr, AF_INET );
   print NEW_SOCKET "Smile from the server";
   print "Connection recieved from $name\n";
   close NEW_SOCKET;
}

Client.pl

connect( SOCKET, pack_sockaddr_in($port, inet_aton($server)))
   or die "Can't connect to port $port! \n";

my $line;
while ($line = <SOCKET>) {
   print "$line\n";
}
close SOCKET or die "close: $!";

Выход:

$ perl server.pl 
SERVER started on port 7890
CCCCLLLII : &#x2;�r&#x1;
48498
&#x1;
127.0.0.1
Connection recieved from anantes-158-1-218-114.w2-0.abo.wanadoo.fr

$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   kaushik-Inspiron-5547

$ hostname
kaushik-Inspiron-5547

Откуда код, получающий имя anates, я не получаю.

Я ожидал, что имя хоста будет напечатано как kaushik-Inspiron-5547

1 Ответ

2 голосов
/ 10 мая 2019
gethostbyaddr($client_addr, AF_INET)

должно быть

gethostbyaddr($iaddr, AF_INET)

Мусор, который вы передаете gethostbyaddr, обрабатывается как 2.0.189.114, и обратный поиск DNS для этого адреса дает anantes-158-1-218-114.w2-0.abo.wanadoo.fr.


$ perl -MSocket -e'
   my $client_addr = sockaddr_in(48498, inet_aton("127.0.0.1"));
   my ($port, $iaddr) = sockaddr_in($client_addr);
   CORE::say "".gethostbyaddr($client_addr, AF_INET);  # XXX Garbage
   CORE::say "".gethostbyaddr($iaddr, AF_INET);
'
anantes-158-1-218-114.w2-0.abo.wanadoo.fr
localhost
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...