반응형

와이어샤크 + WOL + python

실제 구현에 관련된 코드는 2부에 있습니다.

1부에서는 와이어샤크로 WOL패킷을 확인하고 간단한 이론을 보겠습니다.

 

WOL

WOL은 전원이 종료된 컴퓨터의 랜카드에 특별한 패킷을 송신함으로써 PC를 켜주는 기능을 의미합니다.

WOL을 수행하기 위해서는 기본적으로 PC의 랜카드가 컴퓨터 종료 후에도 WOL 패킷(매직패킷)을 수신할 수 있는 상태여야합니다.(이부분은 여기서 다루지 않겠습니다.)

 

Wireshark

와이어샤크는 네트워크 패킷을 분석하는 가장 대중적인 툴입니다.

간편하게 현재 랜카드가 송신/수신한 모든 패킷들을 확인 할 수 있으며, 해당 패킷의 정보를 쉽게 확인할 수 있도록 간편한 인터페이스를 제공합니다.

 

WOL 패킷확인

Wake On Lan 어플

 

 

 WOL 패킷 확인을 위해서 해당 패킷을 전송하는 어플 [Wake On Lan]을 사용했습니다.

 

 

 

 

왼쪽에 보이는 것처럼 [wol test]라고 [11:22:33:44:55:66]이라는 맥주소를 갖고있는 컴퓨터에 WOL 패킷을 전송하도록 해주었습니다.

 

이때 와이어샤크로 감자하는 PC와 해당 스마트폰은 동일한 네트워크망에 접속되어있어야합니다.(공유기 종류 무관)

 

 

 

 

 

 

 

 

 

 

 

 

 

와이어 샤크 패킷수신화면

WOL이 사용하는 udp 9번 포트를 필터링한 결과 3개의 패킷이 전송된 것을 볼 수 있었습니다.

(맥주소는 굳이 가려봤습니다.)

 

한번에 어플이 3개의 패킷을 송신하는 것을 볼 수 있었습니다.

 

 

패킷정보(총 144byte)

와이어샤크 수신 패킷

와이어샤크 화면 하단에 표시된 내용을 순서대로 말씀드리겠습니다.

 

 

Ethernet 계층 (MAC프레임)

Ethernet (Data Link) Layer
이미지 출처 : 정보통신기술용어해설

  • DA(Dst Mac Address) = 'ff ff ff ff ff ff'
  • SA(Src Mac Address) = '50 77 05 -- -- --' 
  • Ethertype(Ethernet Protocol Type) = '08 00' (IPv4)

참고) 이더넷 타입표

  • Data = Layer3 이상부분

 

 

 

Network 계층 (IP Header)

Network Layer
이미지 출처 : 정보통신기술용어해설

  • Verson = '4'
    • IPv4
  • Header Length = '5'
    • Header Length는 위 IP헤더에서 한 줄을 의미합니다.
    • 즉 5x4byte = 20byte로 IP헤더의 최소길이를 의미합니다.
  • Type of Service = '00'
    • 미할당 영역으로 추가기능을 위한 공간입니다.
  •  Total Length = '00 82'
    • 8x16+2 = 130byte
    • 즉, IP Packet = Header(20byte) + Data(110byte) 로 이루어집니다.
  • Identification = '29 22'
    • Packet에 부여되는 식별자(오류제어등에 사용됨)
  • Flags + Fragment offset
    • Flags는 3bit 공간에 각 자리수가 특정의미를 갖음
    • [ Reserved bit | Don't Fragment | More Fragments | 
    • 40 = 010 = Don't Fragment
    • offset은 단편화가 된 경우 패킷의 순서를 확인하는 용도로 사용됨
  • TTL(Time to Live) = '40'
    • 패킷이 통과할 수 있는 노드의 수를 의미합니다.
    • 노드를 통과할 때 마다 1씩 감소하며 0이되면 전송실패와 함께, ICMP 메시지를 전송합니다.
  • Protocol type = '11'
    • 프로토콜 맵팽은 아래와 같습니다.
    • ICMP = 1 | IGMP = 2 | TCP = 6 | EGP = 8 | UDP = 17 | OSPF = 89 등...
    • 11 = 10진수로 17(즉, UDP를 의미)
  • Header Checksum = '48 69'
    • Checksum은 오류검출용 코드입니다.
  • Src IP Addr = 'c9 a8 23 90' (192.168.35.144)
  • Dst IP Addr = 'c0 a8 23 ff' (192.168.35.255)
    • WOL 기능은 목적지 주소를 망주소로 전송합니다.

 

 

 

Transport (UDP Datagram)

Transport Layer (UDP Datagram)
이미지 출처 : 정보통신기술용어해설

  • Src Port = 'eb e5' (60389)
  • Dst Port = '00 09' (9)
    • WOL은 수신 Port로 7 또는 9를 사용합니다.
  • Length = '00 6e' (110)
    • 위어서 언급한 것처럼, IP Packet에서 Data영역이었던 UDP부분이 110Byte임을 볼 수 있습니다.
  • Checksum = 'ad 79'
    • 수신측 오류확인을 위해 사용합니다.

 

 

 

Application (WOL Data)

Application Layer (WOL Data)

WOL은 특별한 데이터를 넘겨줍니다.

UDP Data로 들어온 WOL 정보

'FF FF FF FF FF FF' Broadcast MAC 주소와 목적지의 MAC 주소의 조합으로 이루어집니다.

 

위와 같이 하나의 'Broadcast' + 16개(또는 20개)의 '목적지 MAC 주소'로 이루어집니다.

 

 

 

 

끝?

 

다음 게시물은 위의 패킷을 생성하는 파이썬 코드를 보겠습니다. 이상입니다.

반응형
반응형

네이버 동영상 크롤링

완료 누르기 전에 미리보기 눌렀다가 실수로 작성한글 날려서 처음부터... 덕분에 하루늦게 올립니다.

시작하기 전에

크롤링 공부를 위한 자료입니다. 데이터 수집을 위한 다양한 방법을 소개하기 위한 포스터로 개인의 공부 등을 위해서만 아래 내용을 사용해주시면 감사하겠습니다.

네이버를 포함하여 웹서버에 과도한 트래픽을 발생시키거나, 다운받은 영상을 공유할 경우 영업방해와 저작권위반등에 문제가 발생할 수 있습니다.

이에따른 문제에 대해서는 책임지지 않습니다.

 

1. URL 얻어오기

여직까지 URL을 찾는다고 표현을 해왔는데, 이번에는 얻어온다고 표현하겠습니다.

15초 광고 후 재생의 경우에는 확인해보니 광고가 재생되는 시점에 웹브라우저가 서버로부터 광고 후 재생될 영상의 url을 전송받는 것을 확인할 수 있었습니다.

 

크롬 네트워크

[ 크롬 -> 검사 -> 네트워크 ]로 들어가보면 위와같은 화면을 볼 수 있습니다.

확인해보니 이 시점에 영상의 url을 전송받으며, 광고가 끝난 후 영상을 전송받는 것을 확인 할 수 있었습니다.

 

영상의 URL을 담은 응답메시지

위 화면에서 "source" : "~~~" 라고 되어있는 부분이 영상의 URL이 되는 부분입니다.

확인해보니 영상의 해상도에 따라서 URL이 서로 다른것을 볼 수 있었습니다.

 

저 응답메시지를 직접 파이썬에서 불러와서 확인하면 좋겠지만, 아직미숙해서...

 

저는 요청메시지를 그대로 갖고와서 서버로부터 응답메시지를 받아서 처리하는 방법으로 가보겠습니다.

 

2. 요청메시지(Request)

요청메시지를 먼저 확인해보겠습니다. 

 

요청메시지

GET 메서드를 이용해서 전송되는 요청메시지의 파라미터들은 위와같습니다.

일부 내용은 요청메시지마다 중복되는 것들이겠지만, 영상의 종류에 따라서 내용이 많이 다를 수 있기 때문에 파라미터들에 들어갈 내용을 분석해보지는 않겠습니다.

 

저 파라미터 내용은 나중에 심심하면 어떻게 만들어지는지 한번 하나씩 분석해보겠습니다.

 

어찌되었든, 우리의 브라우저에서 저러한 메시지를 웹서버로 전송하기 때문에, 브라우저 로그를 기록하여 요청메시지를 얻어보겠습니다.

 

브라우저 로그

위와같은 방식으로 브라우저를 실행하면 위와같이 전송된 요청메시지를 확인 할 수 있습니다.

 

3~4초에 800개정도의 메시지가...보내졌습니다...

 

우리는 이 많은 메시지에서 원하는 메시지(URL을 응답받을 수 있는 메시지)를 찾는 작업을 해야합니다.

 

흠...

 

요청파라미터의 내용을 보셔서 아시겠지만, 전송되는 메시지의 길이가 상당히 긴 편입니다.

따라서 메시지 길이가 6000자 이하면 버리도록 하겠고, 또하나 메시지에 

 

[ "url":"(https://apis.naver.com/rmcnmv/rmcnmv/vod/play ] 라는 내용이 존재해야합니다. 요청메시지의 기본내용이니까요. (혹시 틀리면 나중에 수정하겠습니다.)

 

따라서 위의 조건을 사용해서 원하는 메시지를 찾아보겠습니다.

 

요청메시지 확인하기

위와같이 실행해보니까 딱 하나, 요청메시지가 걸립니다. 빈 리스트들은 메시지가 6000이상이지만, 정규표현식에서 안잡히는 녀석들입니다.

 

3. URL 응답받기

마지막으로 매우 간단한 작업이 남았습니다.

import requests 를 해주신 후 앞에서 찾아낸 요청메시지를 전송하고, 응답메시지를 받으면 거기서 원하는 정보를 찾으면 끝입니다.

 

응답메시지에서 URL 확인

위와같이 원하는 부분을 추출할 수 있습니다. (JSON을 이용해도 무관합니다.)

 

여러개의 URL에 검색되는 것은 말씀드린 것처럼, 해상도별로 URL이 조금씩 다르기 때문입니다.

 

우리는 가장 고해상도를 필요로 함으로 마지막 append부분을 아래처럼 바꿔주겠습니다.

 

URL 확인

끝~

 

깔끔하게 하나의 URL을 얻어왔습니다.

 

결과화면

 

 

일단 여기까지!

 

에혀...

 

확인해보니까 15초 후 SKIP과 같은 방식도 위와같이 광고시간에 URL을 전송받더군요...

(왜 생각을 못했지...)

 

따라서 그냥 위의 코드만 이용해서 url을 얻어와도 될테고, 혹은 서버에 응답요청 한번이라도 덜주겠다 싶으시면, 그냥 skip버튼 활성화해서 클릭하셔도 될꺼같습니다...

 

큰 차이는 없을꺼 같네요...

 

다음에는 코드정리와 멀티프로세싱을 다루겠습니다.

반응형
반응형

네이버 동영상 크롤링

 

목표!

이전편에 말씀드린 것처럼 동영상 광고 후 스킵에대한 문제를 해결하도록 하겠습니다.

 

1. 의외로 간단한 해결...

5초/ 15초 광고 후 스킵이 가능한 영상의 코드를 확인해봤는데 단순히 skip버튼이 숨김상태로 존재하는 것을 확인할 수 있었습니다.

 

네... 그냥 script 수정해서 활성화 시켜주고, 클릭하도록 해주면 됩니다.

 

SKIP 버튼 확인

위 영상은 15초 광고 후 스킵이 가능한 영상입니다.

위에 붉게 칠해진 부분을 보면 [ button ] 속성을 볼 수 있습니다.

 

이부분이 SKIP 버튼에 대한 부분일 것을 볼 수 있습니다.

 

보게되면 style 영역에 [ display : none; ] 라고 되어있는 부분이 있는 것을 알 수 있습니다. (크흠...)

 

이부분을 [ display : block; ] 으로 변경해보면 아래같이 바뀌는 것을 볼 수 있습니다.

 

너무... 간단하네요... ㅎㅎ

 

 

SKIP 버튼 활성화

위와 같이 SKIP버튼이 활성화 되는 것을 볼 수 있습니다.

 

실제로 클릭하면 SKIP도 됩니다.

 

그럼 위의 과정을 코드로 작성하겠습니다.

 

먼저 XPath를 얻어와야합니다. (이전글에서 사용했던 방법 그대로 진행했습니다. id 변경해준 후 XPath Copy)

 

그다음 script를 수정해주는 코드를 넣어주고, 버튼에 click을 붙여주면 됩니다.

 

2. 코드

전체 코드

한칸한칸 설명드리겠습니다.

 

1) 기본 라이브러리 호출

2) 크롬브라우저 실행, 다운로드를 원하는 페이지 접속

3) 숨겨져있는 SKIP버튼 호출 (skip버튼의 상태가 none로 된걸을 볼 수 있습니다.)

4) SKIP버튼의 style을 display:block;으로 재설정 (skip버튼의 상태가 block으로 변한것을 볼 수 있습니다.)

5) 활성화된 SKIP버튼 클릭

6) 동영상 url을 갖고와서 저장

 

간단하게 첫번째 문제는 해결했습니다.

 

그럼 다음으로 두번째 문제, [광고 15초 후 재생]의 경우의 해결법을 찾아보겠습니다. (난항이 예상되는...)

반응형

+ Recent posts