application layer, network layer 등의 다양한 형태의 네트워크 벽이 있다. 단순하게 타겟 서버로 네트워크 연결이 되는지, 서버 블랙리스트로 되어있진 않은지 등을 체크하기 위해 사용하는 명령어들을 체크해보자!
다양한 통신 프로토콜을 이용하여 데이터를 전송하기 위한 라이브러리와 명령 줄 도구를 제공하는 컴퓨터 소프트웨어 프로젝트이고 libcurl와 cURL이라는 2개의 제품을 포함한다.
command line tool이다. HTTP, FTP, LDAP, TELNET, HTTPS, DICT와 같은 프로토콜을 지원하며, SSL을 가지는 각각의 프로토콜 역시 지원한다. 또한 HTTP기반의 upload, proxies, cookies, user+password 인증을 사용할 수도 있다.
server <-> client 통신의 프로세스에서 중계역할을한다. 사용은 context 객체와 요청데이터 (URL, 인자)와 콜백(callback functions)형식의 response handler를 정의해 주면된다.
이 객채를 라이브러리에 넘기게 되면, 라이브러리는 저수준에서 일어나는 네트워크 통신을 알아서 핸들하고 그 결과 값을 response handler를 통해서 넘겨주게 된다.
libCURL은 고수준의 라이브러리로 프로그래머는 프로토콜이 어떻게 생겨먹었는지에 대해서 신경쓸 필요 없이, 데이터만 넘겨주는 정도로 필요한 프로그램을 작성할수 있다. libCURL이 Application 계층아래를 완전히 추상화 시켜주기 때문이다.
아주 간단하게 특정 서버로 GET 요청을 보내보자.
> curl naver.com
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center> NWS </center>
</body>
</html>
# 그냥 naver.com에 redirect를 걸어놓았다.
> curl https://www.naver.com
<중략>
...
# index.html에 해당하는 DOCS의 내용이 주르르륵 나온다
다양한 통신 프로토콜을 Application 수준에서만 고민하고 바로 요청을 보낼 수 있다. 사용법은 기본적으로 위와같이 아주 간단하다. 하지만 우린 chrome등과 같은 브라우저들을 통해 curl을 더 손 쉽게 사용할 수 있다.
브라우저를 naver.com 으로 들어가서 "개발자 도구 -> 네트워크 -> 문서탭" 에서 아래 사진과 같은 www.naver.com 문서의 응답을 확인해보자!
curl 'https://www.naver.com/' \
-H 'authority: www.naver.com' \
-H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
-H 'accept-language: en,ko-KR;q=0.9,ko;q=0.8,en-US;q=0.7' \
-H 'cache-control: no-cache' \
-H 'pragma: no-cache' \
-H 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "macOS"' \
-H 'sec-fetch-dest: document' \
-H 'sec-fetch-mode: navigate' \
-H 'sec-fetch-site: none' \
-H 'sec-fetch-user: ?1' \
-H 'upgrade-insecure-requests: 1' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36' \
--compressed
telnet, ping, traceroute, netstat, ss, nslookup 을 기본적으로 알아보자!
텔넷(TELNET)은 인터넷이나 로컬 영역 네트워크 연결에 쓰이는 네트워크 프로토콜이다. RFC15를 시작으로 1969년에 개발되었으며 최초의 인터넷 표준들 가운데 하나로서 IETF STD 8로 표준화되었다.
telnet이라는 용어는 프로토콜의 클라이언트 일부 기능이 추가된 소프트웨어를 일컫는다. 텔넷 클라이언트는 대부분의 유닉스 시스템에서 여러 해 동안 사용할 수 있으며, 실질상 모든 플랫폼에서 사용할 수 있다. TCP/IP 스택을 갖춘 대부분의 네트워크 장비와 운영 체제들은 원격 구성(윈도 NT 기반)을 위해 몇 가지 종류의 텔넷 서비스 서버를 지원한다. 텔넷의 보안 문제 때문에 사용률이 감소하여, 원격 제어를 위해 SSH로 대체되기도 하였다.
일반적으로 텔넷이 1973년 3월 5일까지 어떠한 공식적 정의도 없는 ad hoc 프로토콜이었으나, 이 이름은 실제로 RFC 206 (NIC 7176)로서 텔레타입 오버 네트워크 프로토콜(Teletype Over Network Protocol)을 가리키는 말이었다.
과거에 "원격 터미널 접속서비스" 로써 많이 사용했다. TCP 23포트를 default로 사용한다. 물론 포트 변경은 가능하다.
일종의 터미널 에뮬레이션 프로토콜로 NVT(Network Vortual Terminal), 네트워크 가상 단말기 라고 불리는 가상터미널 개념을 사용했다.
송신 호스트로부터 수신 호스트로 데이터를 전송할 때 두 시스템에서의 데이터 양식이 다르기 때문에 데이터를 변환시키는 가상 장치이다. 텔넷 프로토콜은 네트워크 가상 단말기(NVT)를 포함하고 있으며, 클라이언트는 서버로부터 받은 NVT 코드를 화면 처리를 위한 적절한 코드로 바꾸고, 사용자 키보드로부터 받은 입력을 NVT 코드로 바꾸는 처리 등을 수행한다.
telnet의 성질을 활용해서 telnet 127.0.0.1 8080
와 같은 방법으로 포트 open 여부를 체크할 수 있다.
원격접속도 가능하다. 하지만, 이제 ssh를 사용하는것이 바람직하다.
핑은 IP 네트워크를 통해 특정한 호스트가 도달할 수 있는지의 여부를 테스트하는 데 쓰이는 컴퓨터 네트워크 도구 중 하나이다.
기본적인 작동 원리는 네트워크 상태를 확인하려는 대상(target) 컴퓨터를 향해 일정 크기의 패킷(packet, 네트워크 최소 전송단위)을 보낸후(ICMP echo request) 대상 컴퓨터가 이에 대해 응답하는 메시지(ICMP echo reply)를 보내면 이를 수신, 분석하여 대상 컴퓨터가 작동하는지, 또는 대상 컴퓨터까지 도달하는 네트워크 상태가 어떠한지 파악할수 있다.
ping 명령은 TCP/IP 프로토콜 중 ICMP(Internet Control Message Protocol)을 통해 동작하므로, 이 프로토콜을 지원하지 않는 기기를 대상으로 ping 수행할수 없습니다 또한 보안의 이유로 ICMP 사용을 차단하는 기기역시 ping 요청에 대응하지 않습니다
그리고 Ping은 Port를 사용하지 않는다. ICMP는 OSI 7layer에서 "Internet" layer로 구분된다. 그래서 상위에 있는 TCP/UDP 의 포트와 상관이 없다! 단순하게 호스트와 메시지를 주고받기 위한 프로토콜이다.
ping [목적지] [option] [전송되는 패킷]
이 가장 기본적인 형태며, 심플하게 ping naver.com
과 같이 사용 가능하다. 그리고 기본적으로 요청 서버 ip를 확인할때 쉽게 바로 사용이 가능하다. (아래 네이버는 ping을 막아 뒀다. google 을 보면 정상적으로 오는 핑이다.)ping 명령에서 -l 옵션을 주면 ping 수행시 전송되는 패킷(데이터가 전송되는 단위)의 크기를 지정활수 있다. ping naver.com -l 100
ping 명령에서 -n 옵션을 주면 ping 수행시 지정된 횟수 만큼 실행할 수 있다. ping naver.com -n 10
traceroute 혹은 tracert는 인터넷을 통해 거친 경로를 표시하고 그 구간의 정보를 기록하고 인터넷 프로토콜 네트워크를 통해 패킷의 전송 지연을 측정하기 위한 컴퓨터 네트워크 진단 유틸리티이다. OS 계열에 따라서 이용되는 프로토콜이 다르다.
요청을 보내는 서버로 부터 목적지까지 경유하는 시스템 정보를 모두 체크하고 확인할 수 있다. 체크가능한 아래 항목을 보자.
간단하게 traceroute [목적지]
로 사용이 가능하다.
기본적으로 최대 30홉까지만 진행되기 때문에 짤릴 수 있다.
사내 망 네트워크가 icmp가 모두 세팅이 되어 있다면, 어디 경로에서 문제가 있는지 체크가 가능하다.
전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구이다. OS X, 리눅스, 솔라리스, BSD를 포함한 유닉스 계열 운영 체제와 윈도우 XP, 윈도우 비스타, 윈도우 7, 윈도우 8, 윈도우 10을 포함한 윈도우 NT 기반 운영 체제에서 이용이 가능하다. 네트워크의 문제를 찾아내고 성능 측정으로서 네트워크 상의 트래픽의 양을 결정하기 위해 사용된다.
성능 측정보다는 문제점 판별에 더 많이 사용되어 왔다. netstat 명령을 사용하여 네트워크의 트래픽 양을 판별하면 성능의 문제가 네트워크 과잉으로 인한 것인지 여부를 판단할 수 있다.
옵션부터 살짝 살펴보자
간단하게 netstat -antplF
로 체크 가능하다. (아래 사진은 ubuntu OS)
Local Address column은 현재 열려있거나 혹은 리스닝하고있는 ip, port를 나타낸다. 즉 0.0.0.0:8000은 Foreign Address가 0.0.0.0:* 로 표시되어 있는데, all interface를 받는다는 의미이며, 모든 ip에 대해 열려있다는 뜻이다.
출력되는 컬럼들은 아래와 같다.
리눅스에서 net-tools의 일부인 netstat은 시대에 뒤쳐진 것으로 간주되며, iproute2의 일부인 ss를 대신 사용하여야 한다.
옵션 없이 ss
만 사용하면 상태 관계 없이 모든 연결을 나열한다.
출력되는 컬럼 State, Recv-Q, Send-Q, Local Address:Port 는 netstat와 동일하다.
모든 수신 TCP 연결은 ss -lt
로, 모든 UDP 연결은 ss -la
로 가능하다. 그리고 카운팅, 요약 통계로 ss -s
사용이 가능하다.
ss -p
는 프로세스 명을 표시하기 때문에 특정 포트에서 실행되는 프로그램을 찾을 때 매우 유용하다. 위 명령어와 섞어서 ss -ltp
로 사용 가능하다.
도메인 네임을 얻거나 IP주소 매핑 또는 다른 DNS 레코드를 DNS에 질의할 때 사용한다. 네트워크 유틸리티, 툴로써 많은 컴퓨터 OS에서 지원한다.
nslookup [목적지]
로 간단하게 사용이 가능하다.
상세한 옵션이 존재한다. 전체적으로 살펴보자
DNS이 세팅이 잘 되었는지 체크할때 유용하게 사용한다.
telnet [목적지주소] port
활용하기. 즉 로컬 포트 체크라면 127.0.0.1을 사용하면 된다.ping [목적지주소]
활용하기.traceroute [목적지주소]
/ 나의 요청이 특정 서버에 계속 어딘가에서 막히는 것 같을 때도 우선 사용해봄직 하다.ss -ltp
nslookup www.steelboso.com