Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

CIDY

pwntools에서 recv로 받아온 것 자르기 본문

잡담..

pwntools에서 recv로 받아온 것 자르기

CIDY 2022. 6. 30. 00:04

일단,

recv(n) -> 최대 n바이트 받아옴
recvn(n) -> 정확히 n바이트 받아옴 (덜받으면 대기)
recvline() -> 한줄 받아옴
recvuntil('x') -> 딱 x까지 받아옴 (못받으면 대기)
recvall() -> 모두 받아옴

이건 다들 알고 쓰는 것일 것이다. 내가 이 글을 쓰는 이유는 recv로 받아온 것을 [ : ]로 자를 수 있는데, 스스로 헷갈려서 정리하려고 쓰는 것임..



ABCDEFGHIJKLMNO

recvline()[3 : ] -> DEFGHIJKLMNO -> 앞쪽 3바이트 뗌
recvline()[ : 3] -> ABC -> 앞쪽 3바이트만 가져옴
recvline()[-3: ] -> NO\n -> 뒤쪽 3바이트만 가져옴
recvline()[ : -3] -> ABCDEFGHIJKLM -> 뒤쪽 3바이트 뗌


recvuntil(b'M')[3: ] -> DEFGHIJKLM -> 앞쪽 3바이트 뗌
recvuntil(b'M')[ : 3] -> ABC -> 앞쪽 3바이트만 가져옴
recvuntil(b'M')[-3: ] -> KLM -> 뒤쪽 3바이트만 가져옴
recvuntil(b'M')[ :-3] -> ABCDEFGHIJ -> 뒤쪽 3바이트 뗌

둘 다 해본 이유는 개행문자의 차이 때문이다. 내가 테스트해본 c코드에서 출력을

printf("%s\n", buf);

이렇게 해서 개행문자가 있다. recvline()은 한 줄 통째로 받아오는거라 \n까지 받는다. \n을 한 바이트로 친다는 것만 조심해서 쓰자




이렇게 이해하면 쉬움. 기본 기능은 없애는건데, 범위를 넘으면 가져옴