2012-07-16 9 views
0

Solaris 10 호스트에는 미리 구성된 포트/서비스에 들어오는 TCP 연결을 가져올 때 bash 스크립트를 시작하도록 구성된 inetd 서비스가 있습니다. 호출 된 bash 스크립트에서 원격 클라이언트의 IP 주소를 찾는 방법이 있습니까?Solaris10 : inted-started bash 스크립트에서 원격 종료 IP 주소를 얻는 방법은 무엇입니까?

GNU 버전의 inetd를 사용하는 경우 --environment 명령 줄 플래그를 사용합니다. 그러나 inetd/inetadm의 기본 Solaris 버전을 사용 중이며이 플래그는이 플래그를 지원하지 않습니다. 이 설정에 해당하는 Solaris가 있습니까?

는 또한 getpeername(2)이 원하는 정보를 반환했을 0 (stdin) 또는 1 (stdout)의 fd에 호출하지만 떠들썩한 파티 스크립트를 실행하고 나는 동등한를 호출 할 수있는 방법을 찾을 수가없는 가정 bash의 getpeername(2)입니다.

getpeername(2)을 수행하고 환경 변수 (또는 명령 행 인수)에 저장하고 기본 bash 스크립트를 호출하는 C 랩퍼를 호출하는 유일한 방법은 무엇입니까?

감사합니다.

답변

1

당신은 pfiles 출력, 같은 것을 분석하여 그들을 얻을 수 있습니다

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

편집 :

:

여기

이 시작 프로세스의 수에 대한 니모의 권리 댓글에 답글 달기에 가벼운 방법입니다

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

빠르고 포괄적 인 답변에 감사드립니다. 나는 grep 패턴을 강화하고'nawk' 대신'cut'을 사용함으로써 조금 더 나아갔습니다. – evolvah

2

Perl 한 줄자에서 getpeername을 호출 할 수 있습니다.

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

쉘 스크립트에서 실행할 백틱 또는 그 밖의 것을 모두 줄 바꿈하십시오.

+0

답변 해 주셔서 감사합니다! 그것은 작동 할 것이지만 jlliagre가 제공 한'pfiles $$ '접근법보다 조금 더 무거워 보인다. 다시 한 번 감사드립니다! – evolvah

+0

나는 "무거운"것에 대해 그렇게 확신하지는 않습니다. 내 대답은 네 가지가 아닌 하나의 추가 과정입니다 ... 어쨌든, 당신이 당신의 대답을 가지고있어서 기쁩니다 :-) – Nemo