我复制了以下脚本并运行它以使其在端口80上侦听。但是netstat
没有显示端口80.为什么netstat
没有播放它,或者Perl脚本不正确?
#!/usr/bin/perl -w
use Socket;
use IO::Handle;
$port=80;
$host='localhost';
$packhost=inet_aton($host);
$address=sockaddr_in($port,$packhost);
socket(SERVER,AF_INET,SOCK_STREAM,getprotobyname('tcp'));
bind(SERVER,$address);
listen(SERVER,10);
while( 1 ) {
next unless (accept(CLIENT,SERVER));
CLIENT->autoflush(1);
$msg_out="WHAT DO YOU WANT?\n";
send(CLIENT,$msg_out,0);
close CLIENT;
}
close SERVER;
exit 1;
答案 0 :(得分:3)
你在哪个平台上?你是如何调用netstat
的?
在Windows XP上,在运行具有管理员权限的脚本后, netstat -a 给了我:
TCP aardvarkvi:http aardvarkvi:0 LISTENING
绑定到1024以下的端口需要*nix
系统上的root权限。既然你没有(或者,我应该说,你似乎盲目复制的代码没有)检查各种调用的返回值,你不会知道它们是否失败。
通常,您不必使用Socket.pm。坚持IO::Socket并避免盲目复制代码而不知道它的作用。
您可能还想查看HTTP::Daemon。
答案 1 :(得分:0)
netstat
可能正在用/etc/services
中的名称替换数字端口号。例如:
~, 503> netstat -a | more Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:svn *:* LISTEN
你可以做的一件事是grep netstat
的输出来查找它正在监听的所有套接字:
netstat -a | grep LISTEN | grep tcp
您还可以告诉netstat
显示数字地址而不是执行主机名或服务查找(还有另一个选项,您可以限制端口号;执行 man netstat ):< / p>
netstat -an | grep LISTEN | grep tcp
答案 2 :(得分:0)
抱歉,我的错,当我运行netstat时,我没有把选项-a。当使用netstat -a时,它显示该端口。