raw 뜻 : 디지털 분야에서 RAW는 '날것의'라는 뜻의 raw라는 영어 형용사의 의미가 확장되어 쓰이는 전문 용어이다. 데이터 압축 뿐만 아니라 특정 프로토콜에 맞추기 위해 가공을 거치지 않은 디지털 데이터를 뜻하는 용어이다.
https://namu.wiki/w/RAW(%ED%8C%8C%EC%9D%BC)
일반 소켓 같은 경우 write(socket, buffer, stream) 이런 식으로 데이터 크기정도만 조작할 수 있다. 하지만 raw 소켓 같은 경우는 응용 프로그램에서 직접 프로토콜 헤더의 전부나 일부를 생성하거나 읽고 쓸 수 있다.
raw 소켓을 사용하는 이유는 새로운 프로토콜을 생성하거나 소켓을 새밀하게 조작하기 위해서이다.
특징 요약
- 세부적인 조작
- 해킹 등에 사용되기 때문에 오해 받지 않도록 세심한 주의 요청
- 신규 프로토콜 설계시 유용
Raw 소켓의 생성
#include <netinet/in.h>
int sd;
sd = socket(AF_INET, SOCK_RAW, protocol);
지금 까지는 tcp헤더를 조작하는 방법을 살펴봤다.
이번에는 IP 헤더를 조작하기 위한 방법이다. IP 헤더를 조작하기 위해서는 IP_HDRINCL 값을 on 상태로 두어야 된다.
promiscuous -> 무차별
Promiscuous Mode 로 설정된 경우 자신의 맥주소와 다른 소켓도 가져오게 된다. lan에 흘러다니는 모든 소켓을 카피해버린다.
LAN 카드는 맥주소를 보게된다. 자신의 맥주소랑 같은 것을 카피한다. 이때 소켓이 일반 소켓이면 IP 모듈로 보내게 된다.
IP 모듈은 패킷 헤더를 열어서 IP 주소를 확인하게 된다. 자신의 IP와 같다면 그 모듈을 TCP 모듈이나 UDP 모듈로 전송한다.
UDP 모듈 또는 TCP 모듈은 포트를 확인하게 된다. 포트를 통해 무슨 서비스를 이용하는지 확인 가능하며 일반 소켓으로 올라가게 된다.
이때 raw 소켓을 사용하게 되면 IP 모듈 TCP, UDP 모듈 소켓 모듈을 거치지 않고 모조리 raw 소켓으로 바로 올려버린다.
raw 소켓은 자신의 맥주소와 상관없이 소켓을 다 모니터링 해볼 수 있다.
리눅스에서 ifconfig eth0 promisc 명령어를 통해서 무차별 모드를 활성화 할 수 있다.
여기서 et0 는 랜카드 번호이다.
무차별 모드로 설정된 예제가 있다. 일단 일반 소켓 영역에서 말하자면 아래 그림을 보면 NIC(Network Interface Card) 에서 자신의 MAC주소와 같은
SYN 메시지를 주고밭는 이유는 서버 포트가 열려 있는지 판단하기 위해서이다.
'네트워크' 카테고리의 다른 글
raw 소켓 #3 (0) | 2020.10.07 |
---|---|
raw 소켓 #2 (0) | 2020.10.06 |
SFP(Small Form-factor Pluggable) Transceiver (0) | 2020.08.30 |
ARP(Address Resolution Protocol - 주소 결정 프로토콜) (0) | 2020.08.29 |
[c언어] 3바이트, 6바이트 데이터 타입 만들기 (0) | 2020.08.16 |