如何使用IO::Socket::SSL获取我自己的服务器IP地址



出于内部连接监控的目的,我需要用Perl发布本地客户端,例如(不拦截,一个单独的客户端到一个现有服务器):

my $srv_ip=????; # I know my server IP address, but this is general and may change, I want this to be taken programmatically somehow.
my $cl=IO::Socket::SSL->new($srv_ip:$Port);

1) 我在一个使用Net::websocket::server的开放式websocket服务器中,但阅读了他们的规范,我没有发现如何检索我的服务器IP地址,我认为应该有一种更简单的方法(可能来自%ENV,但我不确定这种方法在每个操作系统中都适用-它应该是可移植的,至少在Linux系统中是这样)。2) 我还用IO::Socket::SSL:打开了服务器连接侦听器

my @crt=&SSLCerts(); die 'E101' if(@crt==0);
my $ssl=IO::Socket::SSL->new(
Listen        => 10000,
Timeout       => 45,
LocalPort     => $Port,
Proto         => 'tcp',
SSL_cert_file => "$EF::Base/$crt[0][0].crt",
SSL_key_file  => "$EF::Base/$crt[1][0].key"
) or die "E102: $!";

但在他们的规范中,我也没有找到我自己可以使用的服务器IP地址变量。

3) 请注意,同一个pl程序适用于许多系统,每个系统及其端口。虽然它们共享同一主机,但地址是在从客户端登录时输入的,不保存在任何变量中(这可能会有所帮助,但我认为必须有一种简单的方法来检索它,可能是从%ENV)。

我应该在$srv_ip中放入什么才能使其工作?

非常感谢

在IO::Socket:上使用sockaddr()方法

use strict;
use warnings;
use IO::Socket::INET;
my $socket = IO::Socket::INET->new(
PeerAddr => 'localhost:3306'
) or die "$!n";
print inet_ntoa($socket->sockaddr()), "n";

示例输出:

$ perl dummy.pl
127.0.0.1

编辑:请注意,您必须在客户端接受的套接字上使用sockaddr,而不是侦听套接字。在侦听套接字上,您只能看到它绑定到的地址,可能是IN_ADDR_ANY(AKA 0.0.0.0)

相关内容

最新更新