2014-12-03 22 views
0

안녕하세요. 모두가 viewbot에서 모든 작업을 끝내기 전에 저는 재미있는 프로젝트를 말하고 싶습니다. 그리고 실제로 작동하는지 확인하고 싶습니다. 방법. 나는 이것을 공개하지 않겠다는 생각이 들지 않거나 진지하게 봇을 쓰는 사람들은 어쩌면 지금 당장 다시 흘러 나오고 싶어하는 내 친구에게 장난을 칠 수도 있습니다. 이제는 그걸로 만날 수있다.twitch view count 봇을 없애기 위해 재설정

트위치 뷰어 토큰을 작성한 다음, 트 위치 카운트로 볼 수있는 곳으로 연결하는 기본 프로그램을 작성했습니다. 여기 내가 10 봇을 쳤을 때 시청자 수를 실제 시청자 수로 재설정 할 때 이상한 점이 있습니다. 제 질문은 어떻게 그것을 알아낼 수 있습니다. 나는 프록시를 사용하여 트위 팅이 이러한 시청자가 전 세계에서 왔고 단일 위치에서 오지 않는다고 생각할 수 있도록 프록시를 사용하고 있습니다.
내가 시도한 또 다른 방법이있다. 그리고 뷰어 토큰을 모두 빌드 한 다음 위에서 위와 같이 뷰 토큰을 얻고 즉시 보내면 프록시를 기반으로 모든 빌드를 작성한 다음 이 시간은 일반적으로 시청자 수 한도를 초과하지만 발생 시청자 수로 다시 설정되지는 않습니다. 여기

ASIHTTPRequest *request43 = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://api.twitch.tv/api/channels/%@/access_token?as3=t",_twitchName]]]; 
     [request43 setProxyHost:host]; 
     [request43 setProxyPort:port]; 
[request43 addRequestHeader:@"Host" value:@"api.twitch.tv"]; 
[request43 addRequestHeader:@"User-Agent" value:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko/20100101 Firefox/33.0"]; 
[request43 addRequestHeader:@"Accept" value:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]; 
[request43 addRequestHeader:@"Accept-Language" value:@"en-US,en;q=0.5"]; 
[request43 addRequestHeader:@"Accept-Encoding" value:@"gzip, deflate"]; 
[request43 addRequestHeader:@"Referer" value:@"http://www-cdn.jtvnw.net/swflibs/TwitchPlayer.rc356cd0c16b6941b7f81b61f6c81628e0af555d9.swf"]; 
[request43 addRequestHeader:@"Cookie" value:@" __qca=P0-1674306474-1405279259134; __utma=165406266.651051162.1405279260.1417284372.1417380722.33; __utmz=165406266.1411832471.26.8.utmcsr=twitch.tv|utmccn=(referral)|utmcmd=referral|utmcct=/nozux; language=en-us; __gads=ID=bc1b6635a26dc0a7:T=1405279267:S=ALNI_MY1rrxM6Qf6aS_lUCRlff0o0gtUaA; unique_id=e8ba8f001f90b6bc293ab6e79ea0b1bb; __utmc=165406266; feature_bucket=88; _twitch_session_id=c06f09efe4c36c8ea46176deabab0cb5; __utmb=165406266.0.10.1417380722; mp_809576468572134f909dffa6bd0dcfcf_mixpanel=%7B%22distinct_id%22%3A%20%22147312bcdb989-0fc383a2c86945-41652d42-13c680-147312bcdba176%22%2C%22%24initial_referrer%22%3A%20%22http%3A%2F%2Fintl.gg%2F%22%2C%22%24initial_referring_domain%22%3A%20%22intl.gg%22%7D"]; 
[request43 addRequestHeader:@"Connection" value:@"keep-alive"]; 
[request43 addRequestHeader:@"If-None-Match" value:@"11b92749f327a27cb4ebfb8b57f12b15"]; 
[request43 addRequestHeader:@"Cache control" value:@"no-cache"]; 
     [request43 setTimeOutSeconds:10]; 
     [request43 setFailedBlock:^{ 
      NSLog(@"failed 1st"); 
      NSLog(@"%@",request43.error); 
     }]; 
     [request43 setCompletionBlock:^{ 

      NSError *error; 
      NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:request43.responseData options:0 error:&error]; 
      NSString *token = [[jsonDic valueForKey:@"token"] stringByAddingPercentEscapesUsingEncoding: 
           NSASCIIStringEncoding]; 

      NSString *sig = [jsonDic valueForKey:@"sig"]; 
      NSLog(@"%@",jsonDic); 

      ASIHTTPRequest *request44 = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://usher.twitch.tv/api/channel/hls/%@.m3u8?token=%@&p=4753325&player=twitchweb&sig=%@&segment_preference=4",_twitchName,token,sig]]]; 
      ////http//usher.twitch.tv/api/channel/hls/%@.m3u8?token=%@&p=4753325&player=twitchweb&sig=%@&segment_preference=4 
          [request44 addRequestHeader:@"Host" value:@"usher.twitch.tv"]; 
      [request44 addRequestHeader:@"User-Agent" value:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko/20100101 Firefox/33.0"]; 
      [request44 addRequestHeader:@"Accept" value:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]; 
      [request44 addRequestHeader:@"Accept-Language" value:@"en-US,en;q=0.5"]; 
      [request44 addRequestHeader:@"Accept-Encoding" value:@"gzip, deflate"]; 
      [request44 addRequestHeader:@"Referer" value:@"http://www-cdn.jtvnw.net/swflibs/TwitchPlayer.rc356cd0c16b6941b7f81b61f6c81628e0af555d9.swf"]; 
      [request44 addRequestHeader:@"Cookie" value:@" __qca=P0-1674306474-1405279259134; __utma=165406266.651051162.1405279260.1417284372.1417380722.33; __utmz=165406266.1411832471.26.8.utmcsr=twitch.tv|utmccn=(referral)|utmcmd=referral|utmcct=/nozux; language=en-us; __gads=ID=bc1b6635a26dc0a7:T=1405279267:S=ALNI_MY1rrxM6Qf6aS_lUCRlff0o0gtUaA; unique_id=e8ba8f001f90b6bc293ab6e79ea0b1bb; __utmc=165406266; feature_bucket=88; _twitch_session_id=c06f09efe4c36c8ea46176deabab0cb5; __utmb=165406266.0.10.1417380722; mp_809576468572134f909dffa6bd0dcfcf_mixpanel=%7B%22distinct_id%22%3A%20%22147312bcdb989-0fc383a2c86945-41652d42-13c680-147312bcdba176%22%2C%22%24initial_referrer%22%3A%20%22http%3A%2F%2Fintl.gg%2F%22%2C%22%24initial_referring_domain%22%3A%20%22intl.gg%22%7D"]; 
      [request44 addRequestHeader:@"Connection" value:@"keep-alive"]; 
      [request44 addRequestHeader:@"Cache control" value:@"no-cache"]; 
      [request44 setProxyHost:host]; 
      [request44 setProxyPort:port]; 
      [request44 setFailedBlock:^{ 
       NSLog(@"failed 2st"); 
       NSLog(@"%@",request44.error); 
      }]; 
      [request44 setCompletionBlock:^{ 

       // NSLog(@"%@",[[NSString alloc] initWithData:request44.responseData encoding:NSUTF8StringEncoding]); 

       NSString *urls = [[NSString alloc] initWithData:request44.responseData encoding:NSUTF8StringEncoding]; 
       // NSLog(@"%@",urls); 
       NSArray *urlArray = [urls componentsSeparatedByString:@"http://"]; 
       NSLog(@"%@",urlArray); 

       if (urlArray.count < 2) { 
        return; 
       } 

       NSString *url = [NSString stringWithFormat:@"http://%@",[[[urlArray objectAtIndex:1] componentsSeparatedByString:@"\n"] objectAtIndex:0]]; 

       //NSString *url = [[NSString stringWithFormat:@"http://%@",[urlArray lastObject]] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
       NSLog(@"%@",url); 
       if ([url rangeOfString:@"video"].location != NSNotFound) { 
        NSLog(@"%@",url); 
        ASIHTTPRequest *final = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:url]]; 


        [final setProxyHost:host]; 
        [final setProxyPort:port]; 
        [final addRequestHeader:@"Cache control" value:@"no-cache"]; 
        [final addRequestHeader:@"Host" value:@"video11.iad02.hls.twitch.tv"]; 
        [final addRequestHeader:@"User-Agent" value:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko/20100101 Firefox/33.0"]; 
        [final addRequestHeader:@"Accept" value:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]; 
        [final addRequestHeader:@"Accept-Language" value:@"en-US,en;q=0.5"]; 
        [final addRequestHeader:@"Accept-Encoding" value:@"gzip, deflate"]; 
        [final addRequestHeader:@"Referer" value:@"http://www-cdn.jtvnw.net/swflibs/TwitchPlayer.rc356cd0c16b6941b7f81b61f6c81628e0af555d9.swf"]; 
        [final addRequestHeader:@"Cookie" value:@"__qca=P0-1674306474-1405279259134; __utma=165406266.651051162.1405279260.1417284372.1417380722.33; __utmz=165406266.1411832471.26.8.utmcsr=twitch.tv|utmccn=(referral)|utmcmd=referral|utmcct=/nozux; language=en-us; __gads=ID=bc1b6635a26dc0a7:T=1405279267:S=ALNI_MY1rrxM6Qf6aS_lUCRlff0o0gtUaA; unique_id=e8ba8f001f90b6bc293ab6e79ea0b1bb; __utmc=165406266; feature_bucket=88; _twitch_session_id=c06f09efe4c36c8ea46176deabab0cb5; __utmb=165406266.0.10.1417380722; mp_809576468572134f909dffa6bd0dcfcf_mixpanel=%7B%22distinct_id%22%3A%20%22147312bcdb989-0fc383a2c86945-41652d42-13c680-147312bcdba176%22%2C%22%24initial_referrer%22%3A%20%22http%3A%2F%2Fintl.gg%2F%22%2C%22%24initial_referring_domain%22%3A%20%22intl.gg%22%7D"]; 
        [final addRequestHeader:@"Connection" value:@"keep-alive"]; 
        [final setFailedBlock:^{ 
         NSLog(@"final failed"); 
        }]; 
        [final setCompletionBlock:^{ 


         if ([final.responseString rangeOfString:@"#EXT-X-MEDIA-SEQUENCE"].location != NSNotFound) { 
          [self.builtRequests addObject:final]; 
          if (proxyDictonary) { 
           [self.SuccessProxies addObject:proxyDictonary]; 
          } 

          [self sendRequest:final]; 
          NSLog(@"%lu",_builtRequests.count); 
         } else { 
          NSLog(@"%@",final.responseHeaders); 
          NSLog(@"%@",final.responseString); 
         } 


        }]; 

        [final startAsynchronous]; 

       } 


      }]; 
      [request44 startAsynchronous]; 

     }]; 
     [request43 startAsynchronous]; 

가 연결이 내 코드에서 응답 헤더입니다 (좀 지저분 그래서 난 그것에 대해 답해야하는 질문에 대답합니다) : 여기

는 토큰을 빌드 코드는 성공 :

Request43:"Accept-Ranges" = bytes; 
Age = 0; 
"Cache-Control" = "max-age=0, private, must-revalidate"; 
Connection = "keep-alive"; 
"Content-Encoding" = gzip; 
"Content-Length" = 231; 
"Content-Type" = "application/json; charset=utf-8"; 
Date = "Wed, 03 Dec 2014 20:51:39 GMT"; 
Etag = "\"151bb8422eb29f9f33a520ab352f152e\""; 
"Front-End-Https" = on; 
Server = nginx; 
Status = "200 OK"; 
Vary = "Accept-Encoding"; 
Via = "1.1 varnish"; 
"Www-Authenticate" = "OAuth realm='TwitchTV'"; 
"X-API-Version" = 3; 
"X-Frame-Options" = SAMEORIGIN; 
"X-MH-Cache" = "appcache2; M"; 
"X-Request-Id" = 7939f63c1e3130c43a4edfc9a0911629; 
"X-Runtime" = "0.030651"; 
"X-UA-Compatible" = "IE=Edge,chrome=1"; 
"X-Varnish" = 1041100800; 

Request44:Connection = "keep-alive"; 
"Content-Length" = 2268; 
"Content-Type" = "application/vnd.apple.mpegurl"; 
Date = "Wed, 03 Dec 2014 20:52:44 GMT"; 
Server = nginx; 
Via = "usher25:8933"; 
"X-Cache" = "MISS from CLONWLPROX1"; 
"X-Cache-Lookup" = "MISS from CLONWLPROX1:9999"; 
final:"Accept-Ranges" = bytes; 
"Access-Control-Allow-Origin" = "https://secure.twitch.tv"; 
Age = 1; 
"Cache-Control" = "no-cache, no-store, private"; 
Connection = "keep-alive"; 
"Content-Length" = 351; 
"Content-Type" = "application/vnd.apple.mpegurl; charset=utf-8"; 
Date = "Wed, 03 Dec 2014 20:57:56 GMT"; 
Expires = "Wed, 03 Dec 2014 20:57:55 GMT"; 
"Last-Modified" = "Wed, 03 Dec 2014 20:57:53 GMT"; 
Server = nginx; 
Via = "1.1 CLONWLPROX1 (squid/3.3.8)"; 
"X-Cache" = "MISS from CLONWLPROX1"; 
"X-Cache-Lookup" = "MISS from CLONWLPROX1:9999"; 

다음은 브라우저를 통해 스트림으로 이동할 때 firefox의 응답 헤더입니다.

request44:Accept-Ranges:bytes 

나이 : 0 캐시 제어 : 최대 사용 기간 = 0, 개인, 연결-재 검증해야합니다 유지 (keep-alive) 콘텐츠 인코딩 : gzip을에게 콘텐츠 길이 : 230 내용 - 형식 : 응용 프로그램/json; 문자셋 = UTF-8 날짜 : 2014년 (수) 그리니치 표준시 21시 07분 44초 의 ETag 12월 3일 "74252dca9d2cf4e5da6f91f0d9fcc6c0" 프런트 엔드-HTTPS : 서버 : nginx를 상태 : 200 OK 비바리 : 수락 - 인코딩 을 통해를 : 1.1 바니시 WWW- 인증 : OAuth 영역 = 'TwitchTV' X-API 버전 : 3 X 프레임 옵션 : SAMEORIGIN X-MH 캐시 : appcache2; M X-요청 ID : 13c6dbe385ebb778b21596eadb83f4bc X-런타임 : 0.060941 X-UA-지원 : IE = 에지, 크롬 = 1 X-니스 : 1048532873

request44:Connection:keep-alive 

콘텐츠 길이 : 2252 콘텐츠 - 유형 : 응용 프로그램/vnd.apple.mpegurl 날짜 : 2014년 12월 3일 (수) 그리니치 표준시 21시 07분 44초 서버 : nginx를 를 통해 : usher16 : 8947

final:Accept-Ranges:bytes 

액세스 제어 - 허용 - 원산지 : https://secure.twitch.tv 나이 : 0 캐시 제어 : no-cache, no-store, private 연결 : 연결 유지 콘텐츠 길이 : 351 콘텐츠 형식 : application/vnd.apple.mpegurl; charset = utf-8 날짜 : 2014 년 12 월 3 일 수요일 21:07:46 GMT 만료 : 2014 년 12 월 3 일 21:07:47 GMT Keep-Alive : timeout = 50 마지막으로 수정 된 날짜 : 12 월 3 일 수요일 2014 21:07:42 GMT 서버 : nginx

+0

텍스트를 읽으려는 사람은 유감스럽게 생각하지만 도움을 주셔서 감사합니다! – Charlie

답변

2

Twitch의 안티 뷰트 코드로 실행됩니다. 아무도 아직 어떻게 작동하는지 해독 할 수 없었습니다. 그들은 그것에 대해 전혀 말하지 않았습니다. 그것은 변덕스러운 것처럼 보인다. 가끔은 정말 잘 작동하고 반 시간은 일하는 것 같습니다. 어떤 사람들은 로봇 제작자를 혼란스럽게하기 위해 로봇을 탐지 할 때 결과를 무작위로 추출한다고 생각합니다. 분명히 트 위치에는 너무 많은 시간이 있습니다.

+0

와우는 인상적이지만 속일 수있는 방법이 있어야합니다. 트위터 봇 탐지기를 보면 뷰 봇팅이 여전히 존재합니다. – Charlie

+0

twitter bots는 채팅 및 조회수의 차이를 감지합니다. 그들은 프론트 페이지의 채널을 이해하지 못합니다. 또는 다른 사이트에 삽입 된 채널. –

+0

잘 지내요. 그들은 정말 뷰티 봇을 멈추는 데 좋은 역할을했습니다. 적어도 나는 4k ppl에 친구를 부팅 시키는데 몇 시간 동안 그를 불러야한다고 말했다. – Charlie