Lesson 1: From Ping to HTTP

내 컴퓨터에 이것저것 깔기 싫으니 이럴때 c9을 쓴다. 아래와같이 명령어를 입력해 networking 환경을 만들어준다. 대부분은 이미 설치되어잇다.

sudo apt-get update
sudo apt-get install netcat-openbsd tcpdump traceroute mtr

Try some network things!

몇가지 해보라니깐 해본다. 아직 이게 뭔지 모르겠다.

ip addr show eth0
ip route show
ping -c3 8.8.8.8
host -t aaaa google.com
host -t mx udacity.com
tcpdump -n -c5 -i eth0 port 22
traceroute www.udacity.com
mtr www.udacity.com
printf 'HEAD / HTTP/1.1\r\nHost: en.wikipedia.org\r\n\r\n' | nc en.wikipedia.org 80

ping

ping -c3 8.8.8.8

8.8.8.8 은 google의 어떤 서비스의 주소이다. 핑(ping)은 상대방과 내가 통신할때 메시지(패킷)가 왔다갔다 걸리는 평균시간을 알수 있다. -c3는 세번 테스트 메시지를 보냈음을 뜻한다.

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=0.788 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=0.350 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=52 time=0.313 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2025ms
rtt min/avg/max/mdev = 0.313/0.483/0.788/0.217 ms

핑은 서버를 이용한 시스템이 아니라 os를 이용하는 시스템이다. url이나 ipecho를 요청(request)하여 응답을 받는 시스템으로 인터넷만 연결되어 있다면 매우간단하게 상대방과 연결가능한지(running) 여부만 확인한다.

httpssh는 서버 프로그램이다.

HTTP

http는 GET, POST과 같은 요청(request)를 보내는거로 프로토콜로 생각하자. 80포트가 기본이고 ssh 22포트로 생각한다. 가장 높은 포트넘버는 65535(2^16-1) 가장낮은 포트넘버는 1이다.

printf & netcat

printf 는 서식화된 출력을 하는 명령어다.(f가 formatting의 약자)

\r은 캐럿이 그 줄 맨 앞으로 간다.(Carriage return)

\n은 캐럿이 다음 줄로 간다.(Line feed)

printf 'HEAD / HTTP/1.1\r\nHost: en.wikipedia.org\r\n\r\n'

HEAD / HTTP/1.1
Host: en.wikipedia.org

nc(netcat)은 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램이다. 이것을 이용해 서버와 대화를 나눌수도 있다. nc는 curl같은거의 하위호환같은거다.

printf 'HEAD / HTTP/1.1\r\nHost: en.wikipedia.org\r\n\r\n' | nc en.wikipedia.org 80 

HTTP/1.1 301 TLS Redirect
Date: Thu, 13 Jul 2017 14:01:14 GMT
Server: Varnish
X-Varnish: 254384402
X-Cache: cp4009 int
X-Cache-Status: int
Set-Cookie: WMF-Last-Access=13-Jul-2017;Path=/;HttpOnly;secure;Expires=Mon, 14 Aug 2017 12:00:00 GMT
Set-Cookie: WMF-Last-Access-Global=13-Jul-2017;Path=/;Domain=.wikipedia.org;HttpOnly;secure;Expires=Mon, 14 Aug 2017 12:00:00 GMT
X-Client-IP: 104.155.216.0
Location: https://en.wikipedia.org/
Content-Length: 0
Connection: keep-alive

근데 도통왜 이렇게 되는지 잘모르겠따. 아마도 HEAD가 http명령어 인듯하다. 정확히 저것들이 어떻게 |를 통해 nc로 들어가는지 잘 모르겠다.

printf 'HEAD / HTTP/1.1\r\nHost: en.wikipedia.org\r\n\r\n' | nc en.wikipedia.org 80 > wikipeida.txt

결과를 txt파일로 저장할수 있다.

netcat 참고링크

nc로 간단한 서버를 만들 수 있다. 이서버는 1234 port에서 통신한다.

nc -l 1234

다른 터미널을 열어 nc localhost 1234를 하면 두터미널간에 대화를 할 수 있다.(내컴퓨터와 c9사이에서 확인해봤는데 이유는 모르겠지만 안된다. 이런걸로 해킹하는건가?)

웹브라우저에서 1234포트로 접속하면 브라우저상에서는 아무것도 뜨지않는다. 반면 터미널에는 아래와같은 메시지가 뜬다. 어 뭐지 싶다.

GET / HTTP/1.1
Host: localhost:8484
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4

이번엔 아까와 비슷한 코드를 터미널에 입력했다. 앞의 코드를 |를통에 뒤에있는 코드에 넣는것이라고 했고, nc -l 2345는 내컴퓨터에서 서버를 여는것이라고 했다. 브라우저에서 localhost:2345로 들어가면 eff.org페이지가 표시된다.

printf 'HTTP/1.1 302 Moved\r\nLocation: https://www.eff.org/' | nc -l 2345
Layer Protocols Concept
Application HTTP, SSH URLs. Password
Transport TCP, UCP Port number
Internet IP IP addresses
Hardware wifi, ethernet, DSL signal strength, access points

results matching ""

    No results matching ""