콘텐츠로 이동

문자 메시지 링크를 열기 전에 curl로 확인한 방법

저장되지 않은 번호로 링크 URL만 포함된 문자 메시지를 받았다.

평소라면 바로 차단했겠지만, 이번에는 발신 번호가 아주 이상해 보이지 않았고 본문도 짧아서 실제 지인이 보낸 링크일지도 모른다는 생각이 들었다.

그런데 이 링크가 너무 의심스러워서 열 수가 없었다. 어떤 링크인지 알 수도 없는데 어떻게 막 열겠나? 먼저 이 URL이 다른 사이트로 리다이렉트되는지, 어떤 성격의 페이지인지 확인하고 싶었다.

브라우저에서 링크를 바로 열면 어떤 주소로 어떤 동작이 실행될지 알 수가 없다.

그래서 처음에는 가상 환경이나 에뮬레이터에서 열어볼까 했지만, 그 정도까지 준비하기에는 번거로웠다. 대신 curl로 HTTP 헤더와 HTML 일부를 먼저 확인하면 최소한 아래 두 가지는 빠르게 볼 수 있다고 생각했다.

  • 이 URL이 다른 곳으로 리다이렉트되는지
  • 페이지 안에 어떤 키워드가 들어 있는지

다만 curl도 결국 서버에 요청을 보내는 방식이므로, 완전히 흔적 없이 확인하는 방법은 아니다. 이번에는 링크를 브라우저로 직접 열기 전에 성격을 먼저 확인하는 용도로만 사용했다.

먼저 HEAD 요청으로 리다이렉트 여부를 확인했다.

Terminal window
curl -I 링크주소

응답 예시는 아래와 같았다.

Terminal window
HTTP/1.1 301 Moved Permanently
Server: awselb/2.0
Date: Thu, 28 May 2026 02:24:29 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive
Location: 링크주소

여기서 Location 헤더를 보면 이 URL이 다른 주소로 이동시키는지 확인할 수 있다. 이번 경우에는 Location에도 같은 계열 주소가 들어 있었고, 바로 수상한 외부 도메인으로 보내는 형태는 아니었다.

그 다음에는 링크 주소를 확인해보니 모바일 부고장을 제공하는 서비스의 주소였다. 그래서 실제 페이지에 부고 서비스 관련 문구가 있는지 HTML 일부를 확인했다.

Terminal window
curl -sL 링크주소 | grep -E "상주|빈소|고인|장례"
  • -s는 출력 중간 진행 표시를 숨긴다. 조용히 결과만 받기 위한 옵션.
  • -L은 리다이렉트(curl -I 링크주소 결과의 Location 주소)가 있으면 최종 응답(서버가 HTTP 리다이렉트로 안내한 범위)까지 따라간다.
    • HTTP 응답이 301, 302, 303, 307, 308처럼 리다이렉트면 Location 헤더를 읽고 다음 URL로 다시 요청한다.
    • 자바스크립트로 리다이렉트한다면 따라가지 못한다.
    • 예)
        1. https://a.com/x 요청
        1. 서버가 302와 Location: https://b.com/y 반환
        1. curl -L이 https://b.com/y 로 다시 요청
        1. 또 리다이렉트면 계속 따라감
        1. 더 이상 리다이렉트가 없으면 그 최종 페이지 응답을 출력
  • grep -E는 정규식으로 여러 키워드를 한 번에 찾는다.

출력에는 아래처럼 제목과 메타 태그 일부가 포함됐다.

<title>XXXX</title>
<meta itemprop="name" content="XXX" />
<meta property="og:title" content="xxxx" />

결과를 보니 실제로 알고 있는 사람 이름과 부고장에 가까운 문구가 확인됐고, 문자 메시지의 링크 성격을 대략 판단할 수 있었다.


  • 먼저 curl -ILocation 헤더를 확인한다.
  • 바로 본문까지 볼 필요가 없으면 HEAD 확인만으로 멈춘다.
  • 본문 확인은 curl -s부터 보고, 최종 도착지 확인이 필요할 때만 curl -sL을 쓴다.
  • 301이나 302 응답은 다른 주소로 이동시키는 리다이렉트를 의미한다.
  • Location 헤더가 예상과 다른 도메인을 가리키면 주의가 필요하다.
  • curl -sL도 실제 HTTP 요청이므로, 접속 기록이 남을 수 있다는 점은 감안해야 한다.
  • HTML에 키워드가 보인다고 해서 반드시 안전한 사이트라고 단정할 수는 없다.

3) 의심 링크를 확인할 때의 순서

섹션 제목: “3) 의심 링크를 확인할 때의 순서”
  • curl -I "URL"로 서버 리다이렉트와 Location을 먼저 확인한다.
  • 본문이 필요하면 curl -s "URL" | headgrep -E로 일부만 본다.
  • 최종 도착지 확인이 필요할 때만 curl -sL "URL"을 쓴다.
  • 그래도 애매하면 브라우저에서 바로 열지 않고 중단한다.