회사 프로젝트 중 로그인 기록이 되지 않는 방문자에 대한 분석 정보를 찾아야 했다.

분석이 가능한 정보를 찾기 위하여 노력을 하였으나

Web 환경에서 사용자의 정보를 획득하기에는 한계가 있는 것 같다.


로그인이라도 되어서 어느 정도의 정보(나이, 성별 등)만 있더라도 한결 수월하게 진행 될 것을

머리를 아무리 굴려봐도 눈 앞을 막고 있는 안개가 없어지지 않았다.ㅠㅠ


타사의 사례를 아무리 검색 해봐도(물론 나의 검색 능력이 부족할 수도 있다.)

아래와 같이 시간대별 정보 정도만 보여준다.


  • 출처 : 구글

그래서 사용자의 Web Request 정보를 이용하여 분석 가능한 데이터를 찾던 중 

GeoIP를 이용하여 사용자 위치를 예상하는 등 몇 가지 정보가 있었으나 다른 정보는 추후에 포스팅 하기로 하고

이번에는 User-Agent를 이용하여 OS, Browser 정보를 확인 가능한 포스팅을 할 생각이다.


아래의 환경은 NginX Webserver에서 받은 Request를 Lua Script를 이용하여 처리를 하는 상황이나

다른 환경에서도 어렵지 않게 사용 가능할 것으로 보인다.


먼저 OS 확인



local os = ""
if string.match(ua, "windows nt 5.1") ~= nil then
        os = "Windows XP"
elseif string.match(ua, "windows nt 6.0") ~= nil then
        os = "Windows Vista"
elseif string.match(ua, "windows nt 6.1") ~= nil then
        os = "Windows 7"
elseif string.match(ua, "windows nt 6.2") ~= nil then
        os = "Windows 8"
elseif string.match(ua, "windows nt 6.3") ~= nil then
        os = "Windows 8.1"
elseif string.match(ua, "windows nt 10.0") ~= nil then
        os = "Windows 10"
elseif string.match(ua, "windows phone 8.1") ~= nil then
        os = "Windows Phone 8.1"
elseif string.match(ua, "windows phone 10.0") ~= nil then
        os = "Windows Phone 10"
elseif string.match(ua, "android") ~= nil then
        os = "Android"
elseif string.match(ua, "blackberry") ~= nil then
        os = "BlackBerry"
elseif string.match(ua, "iphone") ~= nil then
        os = "IPhone"
elseif string.match(ua, "ipad") ~= nil then
        os = "IPad"
elseif string.match(ua, "ipod") ~= nil then
        os = "IPod"
elseif string.match(ua, "mac") ~= nil then
        os = "Mac"
elseif string.match(ua, "x11") ~= nil then
        os = "Linux(X Windows)"
elseif string.match(ua, "windows") ~= nil then
        os = "Windows ETC"
elseif string.match(ua, "googlebot") ~= nil then
        os = "Google BOT"
elseif string.match(ua, "tizen") ~= nil then
        os = "Tizen"
else
        os = "Undefined OS"
end



다음은 Browser 확인


local br = ""
if string.match(ua, "trident/7.0") ~= nil or string.match(ua, "msie 11") ~= nil then
        br = "IE 11"
elseif string.match(ua, "trident/6.0") ~= nil or string.match(ua, "msie 10.0") ~= nil then
        br = "IE 10"
elseif string.match(ua, "trident/5.0") ~= nil or string.match(ua, "msie 9.0") ~= nil then
        br = "IE 9"
elseif string.match(ua, "trident/4.0") ~= nil or string.match(ua, "msie 8.0") ~= nil then
        br = "IE 8"
elseif string.match(ua, "msie 7.0b") ~= nil or string.match(ua, "msie 7.0") ~= nil then
        br = "IE 7"
elseif string.match(ua, "msie 6.1") ~= nil or string.match(ua, "msie 6.1b") ~= nil or string.match(ua, "msie 6.0") ~= nil then
        br = "IE 6"
elseif string.match(ua, "samsungbrowser") ~= nil then
        br = "SamsungBrowser"
elseif string.match(ua, "miui") ~= nil then
        br = "XiaomiBrowser"
elseif string.match(ua, "chrome/") ~= nil and string.match(ua, "like gecko") ~= nil then
        br = "Chrome"
elseif string.match(ua, "safari") ~= nil then
        br = "Safari"
elseif string.match(ua, "firefox") ~= nil then
        br = "Firefox"
elseif string.match(ua, "opr/") ~= nil or string.match(ua, "opera") ~= nil then
        br = "Opera"
elseif string.match(ua, "android") ~= nil then
        br = "Android Browser"
elseif string.match(ua, "ipad") ~= nil or string.match(ua, "ipod") ~= nil or string.match(ua, "iphone") ~= nil then
        br = "IOS Browser"
else
        br = "ETC Browser"
end



이 글을 확인하기 전에 적용을 하거나 이미 한번이라도 관련 글을 봤다면 알겠지만

브라우저 정보의 경우 위에 순서대로 하는 것이 조금이나마 정확하게 잡아 낼수 있다.


위에 정보가 개발을 하며 도움이 되기를 바라며 

Web에서 취득할 수 있는 다양한 정보를 알고 계신다면 댓글로 남겨주세요.


* 혹시라도 위의 정보가 틀렸다면 댓글에 틀린 내용을 남겨 주시면 수정하겠습니다.


WRITTEN BY
똥쟁이찰스

트랙백  0 , 댓글  0개가 달렸습니다.
secret