본문 바로가기

프로그래밍/코딩(C & SOCKET)

[151101] Raw Socket

반응형

[151101] Raw Socket


오늘은 Raw Socket에 대해서 알아보려고 한다.

Socket 이 편지 봉투에 "우표"와 "주소"만 붙여서 보내는 방식이었다고 한다면,

Raw Socket 은 편지지부터 시작해서 글자 수, 언어, 주소 등을 포함한 사사로운 모든 요소들을 직접 설정해서 보내는 방식이라고 할 수 있다.


따로 서버를 구축하거나, 다른 컴퓨터가 없어서 송/수신을 테스트하기 어려워

"루프백 아이피"와 "와이어샤크" 를 사용해서, 정말 내가 설정한 값들로 Packet 이 도착하는지 확인해볼 것이다.


흔히 일어나는 통신 방식 중 하나인 TCP/IP 를 이용할건데,

직접 TCP/IP Header Socket 을 만들어 테스트할 것이다.


1. 구조체 및 각 종 변수 선언




2. TCP Header Setting



3. IP Header Setting



4. Sendto





이제 와이어샤크를 켜고 루프백 인터페이스를 캡쳐하면서 raw_socket.c 를 실행시키면 확인할 수 있다.




 

 




여기서 중요한 점은 임의로 Source 포트와 IP를 조작했다는 점이다. 패킷을 받는 관리자 입장에서는 로그로 남지만, 이는 전혀 신뢰성이 없는 정보들 뿐이다. 이를 이용해서 스텔스 포트 스캐너, ARP 리퀘스트 등에 이용할 수도 있다. 하지만, 이러한 방식에 문제점도 존재한다.

 

추후 포스팅은 Raw Socket의 연장으로 생각하고 있다.











반응형