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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用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 "$!
";

print inet_ntoa($socket->sockaddr()), "
";

示例输出:

$ perl dummy.pl
127.0.0.1

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

以上是关于如何使用IO :: Socket :: SSL获取自己的服务器IP地址的主要内容,如果未能解决你的问题,请参考以下文章

AWS ElasticBeanstalk + Socket.IO + SSL 问题

Socket.io + SSL + 自签名 CA 证书在连接时出错

为 socket.io 和 SSL / WSS 配置 Apache

无法使用 perl IO::Socket::SSL 完成与 gateway.push.apple.com 的 SSL 握手

通过 SSL 使用 Socket.io Node.js 出现网关错误

在 node.js 中使用 socket.io 设置服务器-服务器 SSL 通信