직접 쓰는 것과 같은 효과 / 동작으로 실행중인 프로세스의 표준에 쓰기


8

게시물 은 내 질문의 일부에 대해서만 답변합니다. 내 문제는 / proc 파일 시스템에서 프로세스의 FD를 사용하여 실행중인 프로세스의 stdin에 쓰는 것이 동일한 영향을 미치지 않는다는 것입니다.

문제:

  1. 포트 10000에서 청취하기 위해 nc 시작 (이 프로세스는 추가 nc 1이라고 함)

    nc -l 10000
    
  2. 다른 nc를 시작하여 청취 nc에 문자를 보냅니다 (nc 2가 됨)

    nc localhost 10000
    
  3. NC 2의 표준 입력에 쓰기

    echo "some chars here" >> /proc/[PID-nc-2]/fd/0
    

문제 : "일부 문자는 여기에"리스닝 nc (nc 1)에 도달하지 않지만, nc 2의 콘솔에 BUT가 표시됩니다.

질문 : 왜 그리고 이것이 가능하게 할 수 있습니까?

답변:


11

/proc/<PID>/fd/0파이프가 아니기 때문에 예상대로 작동하지 않습니다 . 송신 측이 파이프에 연결된 stdin으로 호출하면 작동합니다.

수신 호스트에서

nc -l 10000

발신 호스트에서

mkfifo my.fifo
cat >my.fifo &
cat my.fifo | nc remotehost.tld 10000

지금 당신은 할 수 있습니다

echo "Hello World" >my.fifo
myprog >my.fifo

이 있습니다 cat >my.fifo개방 선입 선출 (FIFO) 킵 할 필요가 그렇지 않으면 EOF가 전송됩니다와 연결이 조기에 마감됩니다. 연결을 끊으려면 fifo를 연 상태로 유지하는 고양이 프로세스를 종료해야합니다.


매우 도움이되었습니다! 제 경우에는 실제로는 fifo perms가 일반 사용자가 sudo'ne 스크립트에 영향을 줄 수 있기 때문에 프로세스와 통신 하기가 더 쉬워 졌습니다.
natevw

1

링크 한 게시물에 대한 답변에서 언급 한대로 님이 /proc/pid/fd/0아닌 에 글을 써야합니다 /proc/pid/fd/1.


1
내 질문을 수정했습니다. 그러나 어쨌든 : / fd / 0과 / fd / 1을 모두 시도했습니다. 질문은 남아 ...
Geo

나는 이것을 시도했지만 작은 문제에 직면했다. 이 게시물을 텔넷에 필요한 도메인을한다,하지만 난 그것을 전달할 내가 드릴 수 없습니다 캐리지 리턴 또는 새 줄 문자의 어떤 종류를 필요로 생각
인 Farhan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.