Linux 네트워크 명령어 - netstat, ss, curl



리눅스에서 네트워크 상태를 확인하고 디버깅하는 필수 명령어들입니다.



언제 사용하나요?



  • 서버의 열린 포트 확인

  • 네트워크 연결 상태 진단

  • 어떤 프로세스가 특정 포트를 사용하는지 확인

  • API 호출 테스트 및 디버깅

  • 방화벽 문제 해결



netstat - 네트워크 통계


# 열린 포트와 연결 상태 보기
netstat -tulnp

# 옵션 설명
# -t: TCP
# -u: UDP
# -l: LISTEN 상태만
# -n: 숫자로 표시 (DNS 조회 안함)
# -p: 프로세스 정보 표시

# 특정 포트 확인
netstat -tulnp | grep 8080

# 모든 연결 보기
netstat -an

# 연결 상태별 개수
netstat -an | grep ESTABLISHED | wc -l

# 라우팅 테이블
netstat -rn


ss - netstat 대체 (더 빠름)


# 기본 사용법 (netstat과 유사)
ss -tulnp

# 특정 포트 연결 확인
ss -tulnp | grep :8080

# ESTABLISHED 연결만
ss -t state established

# 특정 프로세스의 소켓
ss -p | grep java

# 상세 정보
ss -ti # TCP 상세 정보
ss -mi # 메모리 사용량

# 연결 통계
ss -s


netstat vs ss 비교







netstatss
느림 (deprecated)빠름 (권장)
net-tools 패키지iproute2 패키지
오래된 시스템 호환최신 리눅스 기본 탑재


curl - HTTP 요청 도구


# GET 요청
curl https://api.example.com/users

# 응답 헤더 포함
curl -i https://api.example.com/users

# 헤더만 보기
curl -I https://api.example.com/users

# POST 요청 (JSON)
curl -X POST https://api.example.com/users
-H "Content-Type: application/json"
-d \047{"name": "홍길동", "email": "hong@test.com"}\047

# POST (form data)
curl -X POST https://api.example.com/login
-d "username=admin&password=1234"

# 파일 업로드
curl -X POST https://api.example.com/upload
-F "file=@/path/to/file.jpg"

# 인증 헤더
curl -H "Authorization: Bearer TOKEN" https://api.example.com/me

# 쿠키 사용
curl -b "session=abc123" https://api.example.com/dashboard

# 상세 출력 (디버깅)
curl -v https://api.example.com/users

# 타임아웃 설정
curl --connect-timeout 5 --max-time 30 https://api.example.com

# SSL 검증 무시 (테스트용)
curl -k https://self-signed.example.com

# 출력을 파일로 저장
curl -o result.json https://api.example.com/data

# 리다이렉트 따라가기
curl -L https://short.url/abc


실전 활용 예시



1. 포트 사용 프로세스 찾기


# 8080 포트 사용 프로세스
ss -tulnp | grep :8080
# 또는
lsof -i :8080


2. 서버 연결 테스트


# 포트 연결 가능 여부 확인
nc -zv hostname 8080

# 또는 curl로 확인
curl -v telnet://hostname:8080


3. API 응답 시간 측정


curl -w "
Total: %{time_total}s
" -o /dev/null -s https://api.example.com


4. REST API 테스트


# GET
curl https://api.example.com/users/1

# PUT (수정)
curl -X PUT https://api.example.com/users/1
-H "Content-Type: application/json"
-d \047{"name": "수정된이름"}\047

# DELETE
curl -X DELETE https://api.example.com/users/1


유용한 조합


# JSON 응답 포맷팅 (jq 필요)
curl -s https://api.example.com/users | jq .

# 특정 IP의 연결 수
ss -tn | grep "192.168.1.100" | wc -l

# 연결 상태별 통계
ss -tan | awk \047{print $1}\047 | sort | uniq -c


문제 해결 시나리오



  • "포트가 이미 사용 중": ss -tulnp | grep :PORT로 확인 후 해당 프로세스 종료

  • "연결 거부": 방화벽 확인 iptables -L 또는 firewall-cmd --list-all

  • "연결 시간 초과": 네트워크 경로 확인 traceroute hostname