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

问题描述 投票:1回答:1

我需要在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中放入什么来使它工作?

非常感谢

perl websocket
1个回答
2
投票

在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)。

© www.soinside.com 2019 - 2024. All rights reserved.