Blue-club / webproxy-lab

0 stars 3 forks source link

[Feat] Tiny - WebProxy(mywnajsldkf) #13

Open mywnajsldkf opened 1 year ago

mywnajsldkf commented 1 year ago

⚙ 기능 개요

✅ Implement TODO

숙제

👾 실행 결과

tiny

./tiny 1234

Screenshot 2023-05-23 at 1 14 54 PM

addr 구현

./tiny 1234
http://localhost:1234/cgi-bin/adder?123&123

Screenshot 2023-05-23 at 1 16 01 PM

⭐️ 보완할 점

숙제 11.7

숙제 11.10

mywnajsldkf commented 1 year ago

Linux 환경에서 well-known 포트(0~1023)를 사용하기 위해 root 권한이 필요하다. +) 만약 포트번호를 1023 아래로 지정하고 실행하면 자동으로 포트번호를 1024보다 크게 변경해준다.

Screenshot 2023-05-23 at 11 29 28 AM

chwangmin commented 1 year ago

Linux 환경에서 well-known 포트(0~1023)를 사용하기 위해 root 권한이 필요하다. +) 만약 포트번호를 1023 아래로 지정하고 실행하면 자동으로 포트번호를 1024보다 크게 변경해준다.

Screenshot 2023-05-23 at 11 29 28 AM

port번호는 사용할 수 있는 영역이 정해져 있습니다.

0 ~ 1023 : well-known port번호 영역입니다. 이 영역의 port번호는 UNIX/LINUX에서 root 권한으로만 port를 열 수 있습니다. 예약영역이라고 보면 됩니다.

1024 ~ 49151번: 등록된 포트 (registered port) 이 영역은 주로 서버 소켓으로 사용하는 영역입니다.

49152 ~ 65535번 : 동적 포트(dynamic port) 이 영역은 client가 connect(2)시 또는 bind(2)없이 server socket을 생성했어 listen(2)할 경우에 자동으로 할당되는 영역입니다. server socket에서 자동할당하면, client에게 할당된 port번호를 알릴방법이 있어야하기 때문에 서버 소켓은 prot번호를 정합니다.


출처 : https://www.it-note.kr/189

mywnajsldkf commented 1 year ago

숙제 11.7

TODO

Screenshot 2023-05-23 at 7 29 49 PM

mywnajsldkf commented 1 year ago

숙제 11.9

csapp.c

rio_readn 식별자 fd의 현재 파일 위치에서 메모리 위치 usrbuf로 최대 n바이트를 전송한다.

/*
 * rio_readn - Robustly read n bytes (unbuffered)
 */
/* $begin rio_readn */
ssize_t rio_readn(int fd, void *usrbuf, size_t n) 
{
    size_t nleft = n;
    ssize_t nread;
    char *bufp = usrbuf;

    while (nleft > 0) {
    if ((nread = read(fd, bufp, nleft)) < 0) {
        if (errno == EINTR) /* Interrupted by sig handler return */
        nread = 0;      /* and call read() again */
        else
        return -1;      /* errno set by read() */ 
    } 
    else if (nread == 0)
        break;              /* EOF */
    nleft -= nread;
    bufp += nread;
    }
    return (n - nleft);         /* Return >= 0 */
}

rio_writen usrbuf에서 식별자 fd로 n바이트로 전송한다.

/*
 * rio_writen - Robustly write n bytes (unbuffered)
 */
/* $begin rio_writen */
ssize_t rio_writen(int fd, void *usrbuf, size_t n) 
{
    size_t nleft = n;
    ssize_t nwritten;
    char *bufp = usrbuf;

    while (nleft > 0) {
    if ((nwritten = write(fd, bufp, nleft)) <= 0) {
        if (errno == EINTR)  /* Interrupted by sig handler return */
        nwritten = 0;    /* and call write() again */
        else
        return -1;       /* errno set by write() */
    }
    nleft -= nwritten;
    bufp += nwritten;
    }
    return n;
}
/* $end rio_writen */
mywnajsldkf commented 1 year ago

숙제 11.10, 11.11

계산기 창 만들기

Screenshot 2023-05-23 at 9 45 50 PM -> 계산기 더 예쁘게 만들 것! 😻

Remark

int sscanf(const char str, const char format, ...);

버퍼에서 형식화된 자료형을 읽어오는 함수를 사용하여 자료형을 읽어왔다. first=5&second=3sscanf(buf, "first=%d&second=%d", &n1, &n2); 사용하면 n1 = 5, n2 = 3을 얻을 수 있다.

https://eastroot1590.tistory.com/entry/CC-sscanf-sscanfs

Screenshot 2023-05-24 at 1 07 58 AM

TODO

mywnajsldkf commented 1 year ago

숙제 11.11

Screenshot 2023-05-24 at 3 09 39 AM

if (strcasecmp(method, "GET") == 0) 사용하여 들어온 Method를 확인한다.