2012-07-16 23 views
0

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

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

我还以为getpeername(2)调用上的0(stdin)或1(stdout)的fd将返回所需的信息,但我运行bash脚本,我似乎还没有找到一种方法来调用等效来自bash的getpeername(2)

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

谢谢!

回答

1

您可以通过解析pfiles输出,像让他们:

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

编辑:

这里是在回答Nemo的关于推出进程的数目正确的评论打火机方式:

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

谢谢你的快速和全面的答案!我通过收紧grep模式并使用'cut'而不是'nawk'来进一步进一步。 – evolvah 2012-07-16 21:06:00

2

您可以从Perl单线程中调用getpeername

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

包裹反引号或任何从shell脚本运行。

+0

谢谢你的回答!它会起作用,但它看起来比jlliagre提供的'pfiles $$'方法稍重。再次感谢! – evolvah 2012-07-16 21:08:09

+0

我不会那么肯定“更重”。我的答案是一个额外的过程,而不是四个......无论如何,很高兴你有你的答案:-) – Nemo 2012-07-16 21:33:41