2009-10-08 9 views
2

웹 페이지 사용자가 브라우저 인 경우 서버 측에서 어떻게 감지합니까?방문자가 크롤러가 아닌 브라우저인지 확인합니다.

이 검출 이유는 내가 방문한 페이지에 대한 통계를 저장 그리고 난 사용자가 크롤러 때 어떤 통계를 저장하지 않는 것이있다. 그래서 어떤 브라우저 벤더를 감지하려고하지 않습니다. 나는 부울 응답 만 원한다. 사용자는 브라우저이다.

나는 대답이 사용자 에이전트 헤더와 연결되어 가정,하지만 나를 파악하기위한 수많은 가능성이 값이 너무 압도적이다. 어떻게 감지 할 수 있습니까? 가장 인기있는 Top5 브라우저 만 검색하는 90 % 솔루션으로 충분할 것입니다.

나는 C# ASP.Net을 사용하고 있습니다,하지만 난 다른 언어 및 프레임 워크에있는 대부분의 솔루션은 번역 될 수있는 것 같아요.

+4

는 지금까지 내가 이해, 사용자는 브라우저를 사용하는 사람입니다. 따라서 사용자는 절대로 브라우저가 아닙니다. 어떤 브라우저 사용자가 사용하고 있는지 어떻게 감지 할 수 있습니까? – simon

+3

"나는 브라우저가 아니며 나는 자유인입니다!" user-> get (coat); 사용자 -> 착용 (코트); 사용자 -> 종료 (방); – Skizz

+2

http://stackoverflow.com/questions/544450/detecting-honest-web-crawlers에서 "정직한 웹 크롤러 감지"를 참조하십시오. – Arjan

답변

5

이 코드는 모든 것을 망라한 것이 아니라 PHP의 기초를 제공합니다. 나는 그물을 빠져 나가는 사람이 없을 것이라고 보장 할 수는 없지만 대부분의 브라우저를 잡아야하고 대부분의 봇을 무시해야한다.

<?php 
// Regular expression to match common browsers 
$browserlist = '/(opera|aol|msie|firefox|chrome|konqueror|safari|netscape|navigator|mosaic|lynx|amaya|omniweb|avant|camino|flock|seamonkey|mozilla|gecko)+/i'; 

// Test for browsers 
if (preg_match($browserlist, $_SERVER['HTTP_USER_AGENT'])) { 
    // ...is a browser 
} else { 
    // ...is not a browser 
} 
?> 
+0

preg match 끝에 'i'가 없으면 대소 문자를 구분하지 않아야합니까? – zaf

+0

아주 좋은 지적! 나는 사용자 에이전트를 먼저 strtolower하는 것처럼 그것을 놓쳤습니다.그냥 고치기 – Rowan

+3

이것이 작동 할 것이라고 생각하지 않습니다. 모든 사용자 에이전트는 많은 크롤러를 포함하여 모질라 (길고 슬픈 이야기)로 시작합니다. –

1

당신이 PHP를 사용하는 경우, $_SERVER['HTTP_USER_AGENT'] 또는 get_browser() 기능을보십시오. 이 과정을 매우 쉽게 다운로드 할 수있어

Here's a class. 사용 예제 :

$browser = new Browser(); 
if($browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2) { 
echo 'You have FireFox version 2 or greater'; 
} 
+0

정말 좋은 수업입니다. 통합 및 사용하기 쉽고, 좋은 기능. 정말 유용합니다. 저는 인터넷 Crawlers 로봇을 탐지하기 위해이 도구를 사용하고 있습니다. –

0

당신이 브라우저 HTML 대 스크립트 (예를 들어) 원시 텍스트를 반환할지 여부를 결정해야하는 경우는, 아마도 당신이 Accept-Encoding 요청 헤더를 검사해야합니까?

0

펄은 모듈 HTTP::BrowserDetect을가집니다. 문서에 따르면이 방법은 사용자 에이전트가 로봇인지 여부를 확인하는 방법입니다. 로봇이 아닌 것은 아마도 브라우저 일 것입니다.

+0

저는 두 브라우저 모두 Firefox, IE, Robot 등의 브라우저와 브라우저가 모두 브라우저라고 생각합니다. 그냥 내 의견. –

1

이유를 잘 모릅니다.

그러나, 당신도 당신이 User-agent 헤더를 기반으로 로봇 대 인간 사이에 알 수 척하고 싶지 않아요. 요청의 패턴과 타이밍을 분석하여 성공할 수 있습니다.

1

이것은 99 % 정확도를 제공합니다.

Regex.IsMatch(Request.UserAgent, @"bot|crawler|baiduspider|80legs|ia_archiver|voyager|curl|wget|yahoo! slurp|mediapartners-google", RegexOptions.IgnoreCase); 

나는 여기에 내 대답에 더 많은 솔루션을 나열했습니다

Detecting honest web crawlers

관련 문제