>  기사  >  프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

青灯夜游
青灯夜游앞으로
2022-09-16 11:00:125579검색

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

3년만에 다시 모바일 H5페이지 개발을 접하게 되었습니다. 마지막은 4학년 인턴이었습니다. 이번에는 h5 페이지와 네이티브 앱 간의 상호 작용이 포함된 하이브리드 개발입니다. h5 페이지는 네이티브 앱으로 로그인 상태를 열고 네이티브 카메라를 호출하는 등 네이티브 앱의 인터페이스를 호출해야 합니다. QR 코드를 스캔하세요. 위챗 미니 프로그램 개발과 다르게 위챗은 로컬 개발을 위한 위챗 개발자 도구를 제공하는데, 이는 로컬에서 시뮬레이션하고 호출할 수 있지만, 매번 정적 파일을 패키징하고 디버깅을 위해 서버에 업로드해야 하는데 매우 번거롭습니다.

네이티브 앱이 온라인 h5를 로드할 때 로컬 코드를 실행할 수 있나요? 대답은 '예'입니다. 휘슬과 같은 패킷 캡처 도구를 사용하여 온라인 페이지 요청 데이터를 가로채고 로컬 코드에 응답할 수 있습니다. 이 문서에서는 주로 패킷 캡처 도구 휘슬의 사용을 설명합니다.

1. 패킷 캡처의 원리

1.1 패킷 캡처란?

패킷 캡처는 네트워크 전송 중에 주고받은 데이터 패킷에 대한 가로채기, 재전송, 편집, 전송 및 기타 작업을 수행하는 것입니다. 패킷 캡처를 통해 다음을 수행할 수 있습니다.

  • 네트워크 문제 분석

  • 비즈니스 분석

  • 네트워크 정보 흐름 분석

  • 네트워크 빅데이터 금융 리스크 통제

  • 네트워크 침입 시도 공격 탐지

  • 내부 및 외부 사용자의 네트워크 자원 남용 탐지

  • 네트워크 영향 탐지 침입

  • 링크 인터넷 광대역 트래픽 모니터링

  • 네트워크 사용 트래픽 모니터링(내부 사용자, 외부 사용자 및 시스템 포함)

  • 인터넷 및 사용자 컴퓨터의 보안 상태 모니터링

  • 침투 및 속임수

  • ..

데이터는 아주 작은 단위의 프레임으로 네트워크에서 전송되며, 프레임은 네트워크 드라이버라는 특정 프로그램에 의해 형성됩니다. 통과 네트워크 카드는 데이터를 네트워크 케이블로 보내고, 네트워크 케이블을 통해 대상 시스템에 도달하며 대상 시스템의 한쪽 끝에서 역방향 프로세스를 수행합니다. 수신 시스템의 이더넷은 이러한 프레임을 캡처하고 운영 체제에 프레임이 도착했음을 알리고 저장합니다. 이 전송 및 수신 프로세스 중에 패킷 캡처 도구(스니퍼)를 사용하여 프런트 엔드 개발자는 일반적으로 애플리케이션 계층에서 HTTP/HTTPS 패킷을 캡처할 수 있습니다. 的单位传输的,帧通过特定的称为网络驱动程序的程序进行成型,然后通过网卡发送到网线上,通过网线到达目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。在这个传输和接收的过程,就可以使用抓包工具(Sniffers)进行抓包,作为前端开发者,通常是抓取应用层的 HTTP/HTTPS 的包。

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

1.2 HTTP/HTTPS 抓包原理

HTTP/HTTPS 是应用层使用的通信协议,常见的应用层体系结构是客户端-服务器体系。

对运行在不同端系统上的客户端程序和服务端程序是如何互相通信的么?实际上,在操作系统上的术语中,进行通信的实际上是进程而不是程序,一个进程可以被认为是运行在端系统中的一个程序。

在 web 应用程序中,一个客户浏览器进程与一台服务器进程进行会话交换报文。

浏览器进程需要知道接收进程的主机地址,以及定义在目的主机中的接收进程的标识符,也就是目的端口。

多数应用程序由通信进程对组成,每对中的两个进程互相发送报文。进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文。

进程可以类比一座房子,而它的套接字可以是它的门,套接字是应用层与运输层之间的端口。

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

知道了两个进程的通信流程,我们要怎么抓包呢?举一个生活中的例子,小明暗恋小雯,于是他写了一封情书,但他有点害羞,找了小雯的好朋友小花帮忙传递情书。这个时候,小花可以负责小雯与小明之间的情书传递,作为中间人,她可以偷偷查看他们的情书内容。

思路就是设置一个中间人进程负责抓包,每次目标进程之间的会话都先与中间人进程通信,再进行转发。

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

1.2.1 HTTP 抓包原理

在 http 标准中,没有对通信端身份验证的标准。对于服务器来说,它接收的 HTTP 请求报文只要格式符合规范,就发送响应报文。

对于客户端来说也是如此,它无法校验服务器的身份,比如它连接的 http://www.jecyu.com 的主机,但由于中间节点的存在,最终连接的可能是 http://www.jerry.com

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

1.2 HTTP/HTTPS 패킷 캡처 원리

HTTP/HTTPS는 애플리케이션 계층에서 사용되는 통신 프로토콜입니다. 일반적인 애플리케이션 계층 아키텍처는 클라이언트-서버 시스템입니다.

서로 다른 시스템에서 실행되는 클라이언트 프로그램과 서버 프로그램은 어떻게 서로 통신하나요? 실제로 운영 체제 측면에서 실제로 통신하는 것은 프로그램이 아닌 프로세스입니다. 프로세스는 최종 시스템에서 실행되는 프로그램으로 간주될 수 있습니다.

🎜웹 애플리케이션에서 클라이언트 브라우저 프로세스는 서버 프로세스와 세션 메시지를 교환합니다. 🎜🎜브라우저 프로세스는 수신 프로세스의 호스트 주소와 대상 포트인 대상 호스트에 정의된 수신 프로세스의 식별자를 알아야 합니다. 🎜🎜대부분의 애플리케이션은 통신 프로세스 쌍으로 구성되며, 각 쌍의 두 프로세스는 서로에게 메시지를 보냅니다. 프로세스는 소켓이라는 소프트웨어 인터페이스를 통해 네트워크와 메시지를 보내고 받습니다. 🎜🎜프로세스는 집에 비유할 수 있으며, 소켓은 문이 될 수 있습니다. 소켓은 애플리케이션 계층과 전송 계층 사이의 포트입니다. 🎜🎜프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명🎜🎜알아주세요 두 프로세스 간의 통신 프로세스를 이해한 후 패킷을 어떻게 캡처합니까? 인생의 예를 들자면 샤오밍은 샤오웬을 짝사랑해서 러브레터를 썼지만 조금 수줍어하며 샤오웬의 친한 친구 샤오화에게 러브레터 전달을 도와달라고 부탁했다. 이때 Xiaohua는 Xiaowen과 Xiaoming 사이의 러브레터 전달을 담당할 수 있으며 중개자로서 그들의 러브레터 내용을 비밀리에 볼 수 있습니다. 🎜🎜패킷을 캡처하기 위해 중개자 프로세스를 설정하는 것이 아이디어입니다. 대상 프로세스 간의 각 세션은 먼저 중개자 프로세스와 통신한 다음 이를 전달합니다. 🎜🎜프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명🎜

🎜1.2.1 HTTP 패킷 캡처 원칙🎜🎜🎜http 표준에는 통신 최종 인증에 대한 표준이 없습니다. 서버의 경우 수신한 HTTP 요청 메시지의 형식이 사양을 충족하는 한 응답 메시지를 보냅니다. 🎜🎜클라이언트도 마찬가지입니다. http://www.jecyu.com에 연결하는 호스트 등 서버의 신원을 확인할 수는 없지만 중간 노드, 최종적으로 연결되는 것은 http://www.jerry.com의 호스트일 수 있습니다. 🎜🎜따라서 HTTP 패킷 캡처의 경우 너무 많은 처리를 할 필요가 없습니다. 중개자가 클라이언트와 서버의 데이터 패킷 전달을 담당하도록 하면 됩니다. 🎜🎜🎜1.2.2 HTTPS 패킷 캡처 원리🎜🎜🎜HTTP는 일반 텍스트 전송이므로 중간자 공격에 취약하고 안전하지 않습니다. 🎜

HTTPS 의미 체계는 여전히 HTTP이지만 HTTP 프로토콜 스택의 http와 tcp 사이에 보안 계층이 삽입됩니다SSL/TSL.

보안 계층은 대칭 암호화를 사용하여 전송 데이터를 암호화하고 비대칭 암호화를 사용하여 대칭 키를 전송합니다. 이는 http 데이터가 암호화되지 않음, 신원을 확인할 수 없음, 데이터 수정이 용이하다는 세 가지 핵심 문제를 해결합니다.

HTTP + 암호화 + 인증 + 무결성 보호 = HTTPS

본인 확인 문제는 디지털 서명 기술을 이용하여 제3자 기관(CA 인증서 발급 기관)에서 관리하는 서버의 인증서를 검증함으로써 이루어지며, 인증서 생성, 인증서 저장, 인증서 업데이트, 인증서 취소 등이 포함됩니다.

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

브라우저가 HTTPS 웹사이트에 연결되면 서버는 서버 엔터티 인증서뿐만 아니라 인증서 체인도 보내지만 루트 인증서는 포함되지 않습니다. Windows, Linux, macOS, Android, iOS와 같은 운영 체제에서.

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

인증서는 인증서 발급자 확인과 서버 엔터티 인증서 검증의 두 단계로 나누어집니다.

1. 인증서 체인 확인:

  • 1.1 브라우저는 서버 엔터티 인증서의 상위 수준에서 시작됩니다. 인증서(예: B 인증서)는 공개 키를 획득하고 이를 사용하여 서버 엔터티 인증서의 서명을 확인합니다(서명은 CA 조직의 개인 키를 통해 서명됩니다). 확인에 성공하면 계속하고, 그렇지 않으면 인증서 확인을 진행합니다. 실패합니다.

  • 1.2 브라우저는 인증서 B의 서명을 확인하기 위해 인증서 B의 상위 인증서(예: 인증서 C)에서 공개 키를 얻습니다.

확인에 성공하면 계속하고, 그렇지 않으면 인증서 확인을 진행합니다. 실패합니다.

    1.3 브라우저는 각 인증서의 서명을 반복적으로 확인하고 최종적으로 자체 서명된 루트 인증서를 찾습니다. (발급자와 사용자는 동일합니다.) 브라우저는 루트 인증서를 통합했기 때문에 공개를 완전히 신뢰할 수 있습니다. 최종 서명을 완료하기 위한 루트 인증서 키입니다.
2. 서버 엔터티 인증서 확인: 접근한 도메인 이름 정보가 인증서, 날짜, 인증서 확장 확인 등과 일치하는지 여부.


인증서 확인을 이해한 후 구체적인 https 통신 프로세스를 살펴보겠습니다.

  • 먼저 연결을 설정하기 위한 tcp의 3방향 핸드셰이크입니다

  • 다음은 비대칭 암호화 핸드셰이크 프로세스입니다

  • 클라이언트는 난수를 보냅니다.

    random1 + 지원되는 암호화 알고리즘 세트

  • 서버는 정보를 수신하고 선택한 암호화 알고리즘을 반환합니다. + 인증서(S_공개 키 포함) +

    random2

  • 클라이언트는 인증서의 유효성을 확인합니다.

    random1 +random2를 사용하여 pre-master-secure를 생성하고 서버 공개 키 암호화를 통해 서버로 전송합니다. pre-master-secure

    ,
  • 을 해독한 다음 암호화 알고리즘을 사용하여 생성합니다. master-secure(대칭 암호화 키)를 클라이언트에 보낸 후

    클라이언트가 생성된
  • master-secure
  • 을 수신하면 대칭 암호화 키 전송이 완료됩니다

    마지막으로
  • master를 사용할 수 있습니다. -실제 데이터 대칭 암호화 전송을 위한 보안
  • .

  • 중개자가 패킷을 캡처하려면 HTTPS 암호화 통신 전에 이 작업을 수행해야 합니다.
  • 클라이언트가 보낸 인증서가 포함된 메시지를 가로채 서버인 척하고 인증서를 [클라이언트가 반환한 대칭 암호화 통신 키가 포함된 메시지]에서 중개자와 클라이언트 사이에 대칭 암호화를 위한 키를 생성합니다.

역시 클라이언트인 척 [클라이언트가 반환한 대칭암호 통신키가 포함된 메시지]를 서버 자체의 비대칭 공개키로 암호화하여 서버로 전송하고, 서버가 생성한 대칭암호키를 획득한다. .

  • 이렇게 하면 암호화된 통신이 성립되고, 중개자는 통신 데이터 키를 획득하여 HTTPS 통신 메시지를 확인하고 수정할 수 있습니다.

  • 여기서 클라이언트는 중개자와 통신하고, 중개자는 서버와 통신하며, 모두 정상적으로 HTTPS 암호화 연결을 설정합니다.

  • 가장 중요한 단계 중 하나는
  • 브라우저의 루트 인증서 확인

    입니다. CA 기관이 중개자에 속하지 않고, 웹 사이트에도 없는 도메인 이름 인증서를 단순히 발급하는 것은 불가능합니다. 따라서

    중개자의 루트 인증서만 클라이언트의 운영 체제로 가져올 수 있습니다
  • . 그러면 암호화된 통신을 설정할 때 중개자 인증서 확인을 완료할 수 있습니다.

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명1.3 컴퓨터로 휴대폰 패킷을 가져오는 방법

앞서 배운 내용에 따라 모바일 웹 애플리케이션의 데이터 패킷을 컴퓨터를 통해 가져오려면 중개자 전략이 필요합니다.

웹 애플리케이션의 대상 서버인 것처럼 가장하여 PC 측에 서버 미들맨 프로세스를 만듭니다. 모바일 웹 애플리케이션에서 전송된 요청 데이터는 먼저 중개자를 거쳐 이를 가로채서 처리한 후 대상 서버로 전송됩니다. 그러면 대상 서버에서 보낸 데이터 패킷이 먼저 중개자를 통과한 다음 중개자가 브라우저 클라이언트에 응답합니다.

여기서 주목해야 할 점은 개인용 컴퓨터이든 휴대폰이든 인터넷 네트워크에 연결되어 있어야 하며 서로를 찾아 통신할 수 있다는 것입니다.

일반적으로 개발을 위해 개인용 컴퓨터에서 로컬로 시작된 서버 프로세스는 공용 네트워크에서 액세스할 수 없습니다. 일반적으로 개인용 컴퓨터와 휴대폰은 동일한 라우터에서 전송되는 Wi-Fi에 연결하여 통신할 수 있습니다.

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

구체적인 단계:

  • PC에서 로컬로 서버 프로세스를 시작하고 8899

  • 휴대폰에서 동일한 LAN에 연결하고, 네트워크 프록시를 구성하고, PC의 IP 주소 및 포트 8899

  • 이렇게 하면 휴대폰의 모든 네트워크 통신이 먼저 PC의 포트 8899로 전달되고 데이터 패킷을 분석하고 처리할 수 있습니다

예를 들어, 예를 들어, YouTube에 액세스할 때 컴퓨터는 [서버 소프트웨어]를 사용하여 성공적으로 액세스했습니다. 이때 휴대전화가 컴퓨터 IP 주소와 지정된 포트를 가리키도록 프록시를 구성하면 휴대전화에서도 YouTube에 액세스할 수 있습니다. .

2. Whistle

2.1 Whistle이란 무엇인가요?

Whistle은 Node.js를 기반으로 하는 크로스 플랫폼 패킷 캡처 무료 디버깅 도구입니다.

1. 완전히 크로스 플랫폼입니다. , Windows 및 기타 데스크톱 시스템을 지원하며 서버와 같은 명령줄 시스템을 지원합니다

2. 강력한 기능:

  • HTTP, HTTPS, SOCKS 프록시 및 역방향 프록시 역할을 지원합니다.

  • HTTP의 패킷 캡처 및 수정을 지원합니다. HTTPS, HTTP2, WebSocket, TCP 요청

  • HTTP, HTTPS, HTTP2, WebSocket, TCP 요청 재생 및 구성 지원

  • 업스트림 프록시, PAC 스크립트, 호스트, 지연된(속도 제한) 요청 응답 설정 지원 등

  • 지원 원격 페이지의 콘솔 로그 및 DOM 노드 보기

  • Node를 사용하여 플러그인 확장 기능 개발을 지원하고 독립적인 npm 패키지로도 참조할 수 있습니다

3.

  • 브라우저를 통해 직접 패킷 캡처 및 수정 요청 보기

  • 모든 수정 작업은 구성(시스템 호스트와 유사)을 통해 구현될 수 있으며 그룹 관리 지원

  • 프로젝트는 자체 프록시 규칙을 가져와 구성할 수 있습니다. 한 번의 클릭으로 로컬 Whistle 프록시에 연결하거나 맞춤형 플러그인을 통해 작업을 단순화할 수도 있습니다

whistle을 빠르게 사용하는 방법

  • 첫 번째 설치 노드에서는 nvm 관리를 사용하는 것이 좋습니다

  • 휘슬을 전역적으로 설치하세요

npm i -g whistle & w2 start
설치 후 컴퓨터에 전역 프록시를 설정할 수 있으며 프록시 포트는 8899입니다.

w2 proxy // 设置全局代理

w2 proxy off // 关闭全局代理
http://127.0.0.1:8899/에 액세스할 수 있습니다. 브라우저를 통해 패킷 캡처, 수정 요청 등을 볼 수 있습니다.

http://127.0.0.1:8899/ 查看抓包、修改请求等。

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

如果你不想使用全局代理,就可以安装 SwitchyOmega프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

    If 글로벌 프록시를 사용하지 않으려면 SwitchyOmega 플러그인을 설치하고 필요에 따라 특정 웹사이트에 대한 휘슬 프록시를 설정할 수 있습니다.
  • Whistle 프록시 선택

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

  • Whistle 프록시 설정

프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

2.2 Whistle이 할 수 있는 일

할 일이 많습니다 공식 웹사이트 사진은 다음과 같습니다. 1프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

아래 그림은 몇 가지 구성 예입니다. 1프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

3.휘파람 실제 사례

3.1 기본 앱은 PC 로컬 코드 개발을 로드합니다

웹 페이지는 h5를 통해 로드되었습니다. 하지만 로컬에서 개발할 때는 조립 라인이나 패키지를 거쳐 매번 로컬에서 코드를 업로드하고 싶지 않습니다.

기본 앱의 요청을 로컬 서버로 프록시해야 합니다. 전제 조건은 Wi-Fi 전화와 컴퓨터가 서로 액세스할 수 있어야 한다는 것입니다. 즉, 컴퓨터가 앞서 언급한 PC 패키지를 캡처합니다.

내 웹 서버는 https 애플리케이션이기 때문에 whistle에서 제공하는 루트 인증서를 다운로드하고 수동으로 내 휴대폰으로 가져와야 합니다.

🎜HTTPS 메뉴를 클릭한 다음 휴대폰을 사용하여 QR 코드를 스캔하고 모바일 브라우저를 사용하여 열어 다운로드하고 가져오기를 설정하고 휴대폰 인증서에 대한 신뢰를 설정하세요. 🎜

1프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

此时,再在手机上配置代理指向 PC 电脑的 IP和 whistle 监听的端口即可在电脑上截获数据包。

我本地webpack 启动的服务器应用访问地址为:xxx.xxx.xxx.xxx:8080

whistle 的配置规则:

# Rules

# 访问首页走本地

jecyu.com/webs/short-transport http://xxx.xxx.xxx.xxx:8080?deptCode=755DL # 首页路径

# 后续的请求都使用本地代码

jecyu.com http://xxx.xxx.xxx.xxx:8080?deptCode=755DL

其中试过在原生 app 访问本地应用时出现错误“ webpack 会提示 invalid host header”,解决方案是在 devServer 配置添加即可:

devServer: {

allowedHosts: 'all',

}

至此,成功让原生 app 访问PC 端本地的开发代码。

3.2 查看移动端的 DOM 样式

Whistle 能够通过内置的 Weinre 去实现查看移动端的 DOM 样式,配置规则如下

# 设置 weinre

https://juejin.cn weinre://test

手机上重新访问 juejin.cn 网站,然后打开 weinre 可以看到如下,绿色表示远程连接成功。

1프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

可以点击 Element 查看手机上网页 DOM 结构、样式等信息。

1프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

也可以在 console 控制台中,执行代码,比如 alert ,手机应用上会显示弹框。

1프론트 엔드 사람들을 위한 필수 사항: 패킷 캡처 원리 및 패킷 캡처 도구 휘슬의 사용법에 대한 자세한 설명

4. 总结

学会抓包是软件开发人员必须掌握的调试技能,本文先介绍抓包的原理,再介绍抓包工具 whistle 的使用,whistle 非常强大,本文只是粗略的介绍,更多的使用技巧,大家可以查看官方文档whistle 文档

参考资料

原文地址:https://juejin.cn/post/7140040425129115684

(学习视频分享:web前端

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제