netcat에서 \r\n 종료 쿼리를 대화형으로 어떻게 입력합니까?

netcat에서 \r\n 종료 쿼리를 대화형으로 어떻게 입력합니까?
$ nc example.com 80
GET / HTTP/1.1
Host: example.com 

HTTP/1.1 200 OK
...

작동합니다. 줄 구분 기호는 0A필수 대신 여기에 있습니다 0D0A.

0D0Anetcat에 구분된 쿼리를 어떻게 입력합니까 ?

매번 printf수동으로 입력하여 일회성 작업을 수행 하거나 Perl oneliner와 같은 것을 구현하고 파이프로 연결하는 것은 쉽습니다 . 하지만 제가 놓친 쉬운 방법이 있을까요?\r\ntodosnc

답변1

netcat옵션이 있거나 -Cstdin 에서 대체 --crlf할 수 있습니다 .\n\r\n

또는 사용 중인 터미널에 따라 다릅니다. 내 기본 설정은 다음을 통해 확인할 수 있습니다.

$ stty -a
... lnext = ^V; ...

이는 다음을 보여줍니다.리터럴-다음입력 문자는 입니다 control-V. control-v따라서 다음에 입력하면 캐리지 리턴이 삽입됩니다( 또는 키 control-m를 눌렀을 때 나타나는 개행 문자와 반대 ).returnenter

답변2

문자열을 다음으로 파이프할 수 있습니다 nc.

echo -ne 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80

다음을 통해 확인하세요:

$ echo -ne 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | hd
00000000  47 45 54 20 2f 20 48 54  54 50 2f 31 2e 31 0d 0a  |GET / HTTP/1.1..|
00000010  48 6f 73 74 3a 20 65 78  61 6d 70 6c 65 2e 63 6f  |Host: example.co|
00000020  6d 0d 0a 0d 0a                                    |m....|
00000025

답변3

버퍼링되지 않은 모드( ) sed로 파이프하여 표준 입력에서 다음으로 변환 할 수 있습니다 .nc-u\n\r\n

sed -u 's/$/\r/g' | nc localhost 6379

unix2dos다음과 함께 사용할 수도 있습니다 stdbuf.

stdbuf -i0 -o0 -e0 unix2dos | nc localhost 6379

관련 정보