Contents
see ListLinux 네트워크 명령어 - 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 -rnss - netstat 대체 (더 빠름)
# 기본 사용법 (netstat과 유사)
ss -tulnp
# 특정 포트 연결 확인
ss -tulnp | grep :8080
# ESTABLISHED 연결만
ss -t state established
# 특정 프로세스의 소켓
ss -p | grep java
# 상세 정보
ss -ti # TCP 상세 정보
ss -mi # 메모리 사용량
# 연결 통계
ss -snetstat vs ss 비교
| netstat | ss |
|---|---|
| 느림 (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 :80802. 서버 연결 테스트
# 포트 연결 가능 여부 확인
nc -zv hostname 8080
# 또는 curl로 확인
curl -v telnet://hostname:80803. API 응답 시간 측정
curl -w "
Total: %{time_total}s
" -o /dev/null -s https://api.example.com4. 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