Solaris 10:如何在联合启动的bash脚本中获取远程结束IP地址?

时间:2012-07-16 20:42:55

标签: bash solaris solaris-10 inetd

在Solaris 10主机上,有一个inetd服务配置为在获取到预先配置的端口/服务的传入TCP连接时启动bash脚本。有没有办法在调用的bash脚本中找到远程客户端的IP地址?

如果我使用的是GNU版本的inetd,我会使用--environment命令行标志。但是我使用默认的Solaris版本的inetd / inetadm,它似乎不支持这个标志。是否存在与此设置等效的Solaris?

我还假设在getpeername(2) 0(fd)或1(stdin)上调用stdout会返回所需信息,但我正在运行bash脚本,我似乎没有办法从bash中调用等效的getpeername(2)

我唯一的选择是调用一个C-wrapper来执行getpeername(2),将它存储在环境变量(或命令行参数)中,并调用主bash脚本?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以从Perl one-liner调用getpeername

perl -le 'use Socket; ($port,$addr) = sockaddr_in(getpeername(STDIN)); print inet_ntoa($addr);'

包装反引号或从shell脚本运行的任何内容。

答案 1 :(得分:1)

您可以通过解析pfiles输出来获取它们,例如:

pfiles $$ | grep peername | head -1 | nawk '{print $3}'

编辑:

这是回复Nemo关于启动的进程数量的正确评论的一种较轻的方式:

pfiles $$ | nawk '/peername/ {print $3;exit}'