0

Solaris 10ホストには、事前に構成されたポート/サービスへの着信TCP接続を取得したときにbashスクリプトを開始するように構成されたinetdサービスがあります。呼び出されたbashスクリプトでリモートクライアントのIPアドレスを見つける方法はありますか?

GNUバージョンのinetdを使用している場合は、--environmentコマンドラインフラグを使用します。しかし、私はデフォルトのSolarisバージョンのinetd / inetadmを使用しています。これは、このフラグをサポートしていないようです。この設定に相当するSolarisはありますか?

また、0()または1( )でgetpeername(2)呼び出されると目的の情報が返されると思いますが、bashスクリプトを実行しているため、frombashに相当するものを呼び出す方法が見つからないようです。fdstdinstdoutgetpeername(2)

Cラッパーを呼び出して、getpeername(2)それを環境変数(またはコマンドライン引数)に格納し、メインのbashスクリプトを呼び出す唯一のオプションはありますか?

ありがとうございました!

4

2 に答える 2

2

Perlワンライナーからgetpeernameを呼び出すことができます。

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

バックティックなど、シェルスクリプトから実行するものでラップします。

于 2012-07-16T20:58:23.870 に答える
1

pfiles次のように、出力を解析することでそれらを取得できます。

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

編集:

起動されたプロセスの数に関するNemoの正しいコメントへの返信として、より簡単な方法を次に示します。

pfiles $$ | nawk '/peername/ {print $3;exit}'
于 2012-07-16T20:51:13.667 に答える