0

我复制了下面的脚本并运行它让它监听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;
4

3 回答 3

3

你在哪个平台?你怎么调用netstat

在 Windows XP 上,以管理员权限运行脚本后,netstat -a给了我:

TCP aardvarkvi:http aardvarkvi:0 监听

绑定到低于 1024 的端口需要系统的 root 权限*nix。由于您没有(或者,我应该说,您似乎盲目复制的代码没有)检查各种调用的返回值,因此您不会知道它们是否失败。

通常,您不必使用 Socket.pm。坚持使用IO::Socket并避免盲目地复制代码而不知道它做了什么。

您可能还想查看HTTP::Daemon

于 2009-07-12T13:01:17.880 回答
0

这很可能netstat是用来自 的名称替换数字端口号/etc/services。例如:

    ~, 503> 网络统计-a | 更多的
    活动 Internet 连接(服务器和已建立)
    Proto Recv-Q Send-Q 本地地址 外部地址 状态
    tcp 0 0 *:svn *:* 听

您可以做的一件事是 grepnetstat的输出来查找它正在侦听的所有套接字:

    网络统计-a | 听听 | grep tcp

您还可以告诉netstat显示数字地址而不是进行主机名或服务查找(还有另一个选项可以限制端口号;做man netstat):

    网络统计-an | 听听 | grep tcp
于 2009-07-12T13:01:18.737 回答
0

抱歉,我的错,当我运行 netstat 时,我没有设置选项 -a。当使用 netstat -a 时,它会显示该端口。

于 2009-07-13T07:48:37.420 回答