如何使用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 握手