/dev/tcp/localhost/9999
정수(파일 설명자)로 해석되는지 파일 이름으로 해석되는지 잘 모르겠습니다 .
그러므로 잘 모르겠다"표준 출력 및 표준 오류 리디렉션” (1) 또는 “파일 설명자 복사Bash 매뉴얼의 섹션 (2)는 위의 리디렉션에 적용됩니다.
리디렉션은 지정 여부에 관계없이 작동 n
하지만 (1) 매개 변수를 사용하지 않습니다 n
. 이는 (1)이 사용되지 않는다는 의미입니까?
또한 /dev/tcp/localhost/9999
파일 이름(정수 아님)으로 간주되는 경우 <&1
아래 명령이 작동하는 이유는 무엇입니까? :
/bin/bash >&/dev/tcp/localhost/9999 <&1
이 경우 1
(stdout)은 입력을 위해 열려 있는 파일 설명자가 아니므로 (2)가 실패하게 됩니까?
답변1
/dev/tcp/host/port
<
>
, 또는 <>
(및 >&
또는 &>
에서 ) 사용 여부에 관계없이 bash
항상 읽고 쓰기 위해 열립니다.
>& /dev/tcp/host/port
host:port
표준 출력 및 표준 오류에 연결하고 리디렉션합니다 .
해커들은 및 내부적으로 을 /dev/tcp
사용하고 있으며 마치 읽기나 쓰기용으로만 열리는 파일 설명자인 것처럼 tcp 소켓을 사용하는 명확하고 일관된 방법은 없습니다.socket(2)
connect(2)
파일 설명자가 1번이고 자신을 stdout이라고 부른다고 해서 입력이 가능하지 않다는 의미는 아닙니다. cat <&1
터미널에서도 사용할 수 있습니다.
리디렉션은 n 지정 여부에 관계없이 작동하지만 (1)은 n 매개 변수를 사용하지 않습니다. 이는 (1)이 사용되지 않음을 의미합니다.
여기는 아니야.
true 3>&/dev/tcp/127.0.0.1/9999
bash: /dev/tcp/127.0.0.1/9999: ambiguous redirect