iOS Simulator에서 네트워크 호출을 모니터링하는 방법
Firebug가 하는 것처럼 앱에서 서버로의 통화를 모니터링하려고 합니다.iOS 시뮬레이터나 xCode에서 그것을 볼 수 있는 방법을 찾을 수 없었습니다.
교통체증을 모두 감지하지 않고 그렇게 할 수 있는 방법이 있습니까?그렇지 않다면 어떤 도구를 제안하시겠습니까?
개인적으로, 저는 찰스를 그런 종류의 일에 사용합니다.
활성화하면 모든 네트워크 요청을 모니터링하고 SSL 지원 및 JSON 등의 다양한 요청/응답 형식을 포함한 확장된 요청 세부 정보를 표시합니다.
또한 전체 트래픽이 아닌 특정 서버에 대한 요청만 스니핑하도록 구성할 수 있습니다.
이것은 상업적인 소프트웨어이지만, 시험판이 있고, IMHO는 확실히 훌륭한 도구입니다.
HTTP/HTTPS 트래픽만 보려는 경우 다른 답변에서 제안하는 것처럼 중간 프록시가 좋은 해결책입니다.Burp Suite는 꽤 좋습니다.하지만 구성하는 것이 번거로울 수 있습니다.당신이 어떻게 시뮬레이터와 대화하도록 설득할 수 있을지 모르겠습니다.시뮬레이터가 로컬 Mac의 환경을 사용하므로 프록시 서버 인스턴스를 가로채려면 로컬 Mac의 프록시를 프록시 서버 인스턴스로 설정해야 할 수 있습니다.
패킷 스니핑을 위한 가장 좋은 해결책은 (시뮬레이터가 아닌 실제 iOS 기기에서만 작동하지만) 사용하는 것입니다.rvictl
이 블로그 게시물은 좋은 글입니다.기본적으로 다음을 수행합니다.
rvictl -s <iphone-uid-from-xcode-organizer>
그런 다음 Wireshark(또는 즐겨찾는 도구)를 사용하여 만든 인터페이스를 스니핑한 다음, 인터페이스를 종료합니다.
rvictl -x <iphone-uid-from-xcode-organizer>
이것은 좋은 일입니다. 왜냐하면 만약 당신이 시뮬레이터를 패킷으로 냄새를 맡고 싶다면, 당신은 트래픽을 통해 당신의 로컬 맥으로 건너가야 하기 때문입니다.rvictl
USB 포트에 연결한 iOS 장치의 트래픽을 보여주는 가상 인터페이스를 만듭니다.
최근에 나는 그것을 쉽게 만드는 Git repo를 찾았습니다.
드셔보세요.
다음은 앱의 스크린샷입니다.
안부 전합니다.
Xcode는 CFNetwork 진단 로깅을 제공합니다.애플 독
활성화하려면 다음 항목을 추가합니다.CFNETWORK_DIAGNOSTICS=3
환경 변수 섹션:
머리글과 본문이 포함된 앱의 요청이 표시됩니다.:OS_ACTIVITY_MODE
로 설정해야 합니다.enable
않으면.그렇지 않으면 콘솔에 출력이 표시되지 않습니다.
Mac에서 쉽게 실행되는 자유 및 오픈 소스 프록시 도구는 mitmproxy입니다.
이 웹사이트에는 맥 바이너리에 대한 링크와 Github의 소스 코드가 포함되어 있습니다.
문서에는 HTTPS 트래픽을 보기 위해 테스트 장치에 인증서를 로드하는 방법에 대한 매우 유용한 소개가 포함되어 있습니다.
Charles만큼 GUI에 매력적이지는 않지만, 그것은 제가 필요로 하는 모든 것을 해주고 무료이며 유지됩니다.좋은 기능이며, 이전에 일부 명령줄 도구를 사용한 적이 있다면 매우 간단합니다.
업데이트: 방금 웹사이트에서 mitmproxy를 홈브루 설치로 사용할 수 있다는 것을 알게 되었습니다.이보다 더 쉬운 일은 없습니다.
에서와 같이Xcode 13
Xcode Instruments -> Network Instruments는 macOS macOS 12+에서 iOS 15+를 가 필요합니다.
자세한 내용은 WWDC 2021 비디오의 네트워크 트래픽 분석에서 확인할 수 있습니다.
와이어샤크 잇
인터페이스 선택
더하다filter
시을시작을 합니다.capture
테스트
GET/POST/PUT/DELETE 요청을 트리거하는 작업 또는 버튼을 클릭합니다.
와이어샤크에 나열되어 있습니다.
특정 패킷에 대한 자세한 내용을 알고 싶다면 해당 패킷을 선택하고 [팔로우] > [HTTP 스트림]을 선택하면 됩니다.
이것이 다른 사람들에게 도움이 되기를 바랍니다!!
이것은 최근에 추가된 것 같습니다. 클릭command
+control
+z
디버깅 메뉴가 나타납니다.해당 메뉴에서 다음을 클릭합니다.Inspect
검사에 탭이 표시됩니다.네트워크 탭을 클릭하면 수행 중인 모든 네트워크 요청이 표시됩니다.
케이블 연결과 Mac을 사용하는 경우 간단하고 강력한 방법이 있습니다.
무료 Wireshark를 설치합니다. 장치를 캡처할 수 있는지 확인합니다(컴퓨터를 다시 시작할 때마다 이 작업을 수행해야 합니다!).
sudocmod 644 /dev/bpf*
이제 와이파이로 네트워크를 공유합니다.시스템 기본 설정 > 공유 > 인터넷 공유"연결 공유 위치:이더넷" 및 사용:Wi-Fi. Wi-Fi 보안을 설정하고 싶을 수도 있습니다. 데이터 모니터링에 방해가 되지 않습니다.
새로 만든 네트워크에 전화기를 연결합니다.저는 여기서 몇 번의 시도가 필요합니다.전화가 연결하기를 원하지 않으면 Mac의 wifi를 끈 다음 위의 2단계를 반복하고 인내심을 가지세요.
Wireshark를 사용하여 무선 인터페이스를 캡처합니다. 아마도 "en1"일 것입니다.필요한 IP 주소 및/또는 포트를 필터링합니다.당신이 흥미로운 패키지를 발견하면, 그것을 선택하고, 마우스 오른쪽 버튼을 클릭(컨텍스트 메뉴) > TCP 스트림을 따라가면, 당신은 요청과 답변의 멋진 텍스트 표현을 볼 수 있습니다.
그리고 가장 좋은 것은 정확히 같은 속임수가 Android에도 적용된다는 것입니다!
텔레릭 피들러는 좋은 선택입니다.
http://www.telerik.com/blogs/using-fiddler-with-apple-ios-devices
https 요청을 모니터링하려면 기본적으로 두 가지 광범위한 단계를 수행해야 합니다.
단계별 가이드를 원하는 경우 마지막에 있는 TLDR로 건너뜁니다.
- 중간 프록시(예: Requestly, Charles 또는 HTTP 툴킷)를 설정하고 해당 프록시로 트래픽 전송 시작
시스템의 모든 트래픽을 수신하는 도구를 사용할 수도 있지만, 제 경험상 탐색 및 필터링 방법보다 로그가 너무 많습니다.
더 나은(그리고 더 명확한) 접근법은 iOS 시뮬레이터의 트래픽만 가로채고 모니터링하는 것입니다.
Xcode 프로젝트의 스키마를 편집하여 이 작업을 수행할 수 있습니다.
두 변수를 합니다.http_proxy
그리고.https_proxy
모든 트래픽을 프록시로 보내려면 이 값을 적절하게 설정합니다.대부분은 프록시가 실행 중인 IP와 포트를 항상 언급합니다.
앱이 암호화를 사용하지 않는 경우(아마도 암호화를 사용하는 경우), 이 경우 암호화도 처리해야 합니다.
- 프록시의 자체 서명 인증서를 사용하여 요청 암호화그러면 프록시가 암호를 해독하고 요청 내용을 읽을 수 있으므로 앱의 트래픽을 적절하게 디버그하고 모니터링할 수 있습니다.
iOS 시뮬레이터 안에서 프록시 도구의 자체 서명 루트 인증서를 다운로드합니다.대부분의 는 대분의툴은을 합니다.http
프록시를 구성한 후 시뮬레이터에 이 기능을 쉽게 추가할 수 있습니다. 예,chls.pro/ssl
또는proxy.man/ssl
또는requestly.io/ssl
iOS에서 이 인증서는 시뮬레이터의 인증서 체인에 프록시의 인증서를 추가하는 사용자 정의 프로필을 생성하기 위한 것입니다.
한 후 하려면 프필을다한후설이다십오시동하로로 하십시오.Settings > General > Device Management
여기에는 다운로드한 프로필의 세부 정보와 설치 옵션이 표시됩니다.
이 작업이 완료되면 새로 추가된 인증서에 대해 신뢰를 사용 가능으로 설정해야 합니다.
이 경우 다음으로 이동합니다.Settings > About > Certificate Trust Settings
한
이제 iOS에서 악의적인 일이 발생한다고 불평하지 않고 http 및 https 트래픽을 모니터링할 수 있습니다.
고지 사항 및 TLDR: Requestly Desktop App을 적극적으로 관리하고 있으며 Requestly를 사용하여 iOS 시뮬레이터 모니터링을 설정하기 위한 간단한 단계별 가이드가 있습니다 – https://docs.requestly.io/guides/debugging-https-traffic-in-ios-simulator
- WireShark 설치
- xcode 네트워크 모니터에서 IP 주소 가져오기
- 와이파이 인터페이스 듣기
- WireShark에서 필터 ip.addr == 192.168.1.122 설정
넷폭스를 사용합니다.사용 및 통합이 매우 쉽습니다.시뮬레이터와 기기에서 사용할 수 있습니다.모든 요청 및 응답이 표시됩니다.JSON, XML, HTML, 이미지 및 기타 유형의 응답을 지원합니다.IOS 기본 공유 형식(Gmail, WhatsApp, e-메일, slack, sms 등)별로 요청, 응답 및 전체 로그를 공유할 수 있습니다.
GitHub: https://github.com/kasketis/netfox 에서 확인할 수 있습니다.
Netfox는 iOS 또는 OSX 앱에서 실행되는 모든 네트워크 요청을 빠르게 확인할 수 있습니다.모든 요청 - 물론 사용자의 요청, 타사 라이브러리(예: AFNetworking, Alamofire 또는 기타), UI WebViews 등의 요청을 모두 가져옵니다.
Wormholy라는 오픈 소스 라이브러리를 사용할 수도 있습니다.
코드 없이 프로젝트에 통합하기만 하면 실제 장치에서도 앱의 모든 API 요청을 모니터링할 수 있습니다.
그리고 Charles처럼 인증서를 관리할 필요가 없습니다.모든 것은 마법으로 작동합니다!
FLEX는 iOS 앱에서 네트워크 트래픽을 모니터링할 수 있는 훌륭한 도구입니다.
위 스크린샷에 나열된 요청 중 하나를 클릭하면 해당 요청에 대한 자세한 내용을 볼 수 있는 다른 화면으로 리디렉션됩니다.
하지만 제가 작업하던 앱이 사용자를 Safari로 리디렉션하는 사용 사례가 있었습니다.Safari에서도 네트워크 트래픽을 모니터링하고 싶었지만 FLEX는 다른 앱(이 답변 작성 당시)이 아닌 iOS 앱의 트래픽만 모니터링할 수 있었습니다.
그리고 나서 iOS 시뮬레이터에서 네트워크 트래픽을 모니터링하기 위해 프록시맨으로 전환했습니다.
크롬 인스펙터 도구에 익숙하다면 좋은 해결책은 포니 디버거입니다. https://github.com/square/PonyDebugger
설정하는 것은 다소 번거롭지만 일단 설정하면 잘 작동합니다.하지만 크롬 대신 사파리를 사용해야 합니다.
https://github.com/BugBlock/BugBlock-iOS 은 제가 만든 작은 도구이기 때문에 필요한 모든 것은 다음과 같습니다.
import BugBlock
그리고나서
var config = BBConfiguration()
config.consoleLoggingEnabled = false
config.serverLoggingEnabled = true
config.crashReportingEnabled = true
BBLog.start(appId: "SDK key", configuration: config)
네트워크 인터셉트를 설정합니다.
let conf = URLSessionConfiguration.default
BBLog.networkLogging(with: conf)
let session = URLSession(configuration: conf)
다음 런다음을 합니다.session
당신의 요청에 따라.그것이 당신이 통나무를 잡는 데 도움이 되기를 바랍니다.
언급URL : https://stackoverflow.com/questions/11128362/how-to-monitor-network-calls-made-from-ios-simulator
'programing' 카테고리의 다른 글
nodejs mongodb 네이티브 드라이버에서 문자열을 ObjectId로 변환하는 방법은 무엇입니까? (0) | 2023.05.14 |
---|---|
문자열 배열에 문자열을 추가하는 방법은 무엇입니까?없습니다.함수 추가 (0) | 2023.05.14 |
Postgres 스크립트에서 오류가 발생할 경우 어떻게 중지할 수 있습니까? (0) | 2023.05.14 |
에서 구조체의 기본 생성자를 정의할 수 없는 이유는 무엇입니까?NET? (0) | 2023.05.14 |
Git Cherry-pick vs 병합 워크플로우 (0) | 2023.05.14 |