AdventCalendar Day06 [슈퍼 루비 입문]
7476 단어 CHTTPAdventCalendar
소개
본 기사는 슈퍼 루비 입문 6일째의 기사입니다.
코멘트 받을 수 있는 분은, 가이드라인 를 읽어 주실 수 있으면 다행입니다.
목적
C 언어를 배운 후에 무엇을 할 수 있는지가 이미지하기 어렵다.
HTTP 서버를 C 언어로 자작하는 것으로, 구체적인 이미지를 붙인다.
목표
HTTP
애초에 HTTP란 무엇일까?
HTTP는 통신 프로토콜이다. Hypertext Transfer Protocol의 이름대로 HTML 문서 등의 리소스를 전송하기 위한 애플리케이션 계층 프로토콜이다.
man 명령
man - format and display the on-line manual pages
man 명령은 문서를 볼 수 있는 UNIX 명령입니다.
$ man man (manコマンドのドキュメント)
SOCKET(2)와 같은 표기를 본 적이 있을까? "2"는 섹션의 번호를 나타냅니다.
섹션 번호의 대응은 아래 표와 같다.
장
내용
1
일반 명령
2
시스템 호출
3
라이브러리 함수, 특히 표준 C 라이브러리 함수
4
특수 파일(주로/dev에 있는 장치) 및 드라이버
5
파일 형식과 그 사용법
6
게임과 스크린 세이버
7
기타
8
시스템 관리 명령 및 데몬
예.
$ man 2 socket
Qiita나 블로그등에서 정보를 찾는 것은 편할지도 모르지만, 문서를 읽는 버릇을 빨리 붙여 두면 좋을 것이다.
HTTP 서버
HTTP 서버는 TCP/IP 통신 서버의 일종이다. 차이점은 HTTP 프로토콜 규칙에 따라 통신을 한다는 점이다.
TCP 서버의 통신 순서를 이하에 나타낸다.
위의 절차에 따라 생성 된 HTTP 서버의 코드는 아래에 나와 있습니다.
http_server.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
int main(){
int sock, ret, send_sock;
struct sockaddr_in addr;
struct sockaddr_in client;
socklen_t length;
sock = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
addr.sin_addr.s_addr = INADDR_ANY;
ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr) );
listen(sock, 5);
while(1) {
length = sizeof(client);
send_sock = accept(sock , (struct sockaddr *)&client, &length);
send(send_sock, "HTTP/1.0 200OK\r\n" "Content-Length:6\r\n"
"Content-Type:text/html\r\n" "\r\n" "HELLO\n", 66, 0);
close(send_sock);
}
close(sock);
}
gcc http_server.c
./a.out
구현한 서버를 시작해 보자.
적절한 브라우저에서 127.0.0.1:8080에 액세스하면 HELLO라는 문자가 표시되는지 확인합시다.
HTTP 서버는 80번 포트라는 인식을 하고 있는 사람이 있을지도 모르지만, 80번 이외에서도 통신할 수 있는 것이다.
Wireshark
Wireshark는 네트워크를 흐르는 데이터를 포착하여 내용을 해석·표시하는 프로토콜 분석기(네트워크 분석기)의 하나.
Wireshark에서 패킷을 들여다 보자.
다음과 같이 filter를 걸자.
ip.addr == 127.0.0.1 and tcp.port == 8080 and http
HTTP 서버가 올바르게 통신하고 있는지 확인할 수 있을 것이다.
연습
더 깊고 싶은 사람
보안 미니 캠프 에 응모한다
참고문헌
Linux 네트워크 프로그래밍
시간이 되었을 때 할 일
Reference
이 문제에 관하여(AdventCalendar Day06 [슈퍼 루비 입문]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/imaharu/items/e6273a43fda491a4311f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)