1) 영문판

SetupConsumerC2ROLW-en-us.exe


2) 한글판

SetupConsumerC2ROLW-ko-kr.exe


3) 참고로 파워포인트 뷰어

http://www.microsoft.com/en-us/download/details.aspx?id=13


,

15 년전에 윈도우 파일 시스템 등을 연구하면서 생각해 놓은 것을 적는다.


일반적으로 백신은 프로그램의 10 bytes 정도 특정 패턴 코드를 가지고 잡아내게 된다.


이것을 회피하는 방법에 대한 아이디어가 대학교 1학년 때 생물 수업을 듣는 중 생각났다.


DNA 구조에서 exon 과 intron 이 존재하는데 intron 은 버려지고 exon 만 남게된다.


프로그램도 역시 쓸데없는 trash code 가 사이사이에 존재하면 백신은 프로그램을 잡을 수 없다.


trash code 는 어셈블리어로 레지스터 push, pop 을 반복하던지. jump 를 반복해도 가능하다. 더하기 빼기를 반복해도 된다.


프로그램 전체를 exon , intron 구조로 만들기는 너무 복잡하고 현실적으로 불가능하지만


간단한 loader 는 exon 과 intron 구조로 만드는 것은 가능하다.



exon & intron 구조화된 loader + 암호화된 내부 core 이런 구조를 갖추면 된다.



내부 core 는 다시 복제할 때 loader 의 exon, intron, 암호화 방식을 약간만 바꾸어주면 똑같은 프로그램이지만 백신으로 잡을 수가 없다.

,

회사에서 업무 시간이 정해져 있다면 업무시간에는 진동 또는 무음으로 휴일에는 벨소리로 전환하면 좋지요.


timeriffic 은 이런 과정을 자동으로 해주는 app 입니다. 안드로이드용입니다.


3가지 스케줄을 설정할 수 있는데요.


저는


1) 평일 업무 시간 10시 ~ 7시 무음, 이후 벨소리

2) 토요일 9시~4시 무음, 이후 벨소리

3) 잠자는 시간대 12~6시 무음, 무진동


이렇게 3가지 셋팅으로 profile 을 만들어서 쓰고 있습니다.



https://play.google.com/store/apps/details?id=com.alfray.timeriffic&hl=ko


,

Visual Studio 에서 임시 파일 제거하기 위한 레지스트리입니다.


인터넷에서 발견한 것에서 .lib 파일까지 삭제하도록 추가하였습니다.



Delete_Temporary_Files_for_SVN.reg


,

deltacopy 다운로드


DeltaCopy.zip


## deltacopy server 는 저장소이고

## deltacopy client 는 자료를 보내주는 곳이다.



윈도우에서 사용할 때에는



1. 방화벽, 포트포워드 체크

2. 퍼미션 문제 해결 -> 아래 참조.




## deltacopy 나 rsync 로 작업을 하면 퍼미션이 SYSTEM 으로 잡혀있어서 수정이 어렵다.



이를 해결하기 위해서는


1. 암호가 있는 사용자 계정 (adminstrator) 으로 deltacopy server service 를 실행해야 한다.


-> services / 서비스에서 사용자 계정으로 log on 등록


cf) 암호가 있는 계정이어야 한다. -> 계정에 암호 만들기 / user account

cf) 로그인시 암호 입력 안하기 / netplwiz



2. 기본적으로 deltacopy 에서 rw 권한만 준다. X 까지 주도록 옵션을 주는게 좋다. deltacopy option 에서


1) changes permissions on the server, read&write 옵션을 끈다.


2) additional parameter 에 아래를 입력


--chmod=a=rwX 

(읽기 쓰기 모두 권한 주겠다는 것)



이 방법이 복잡하다면 아래 그림에처럼 Fix file permission 을 실행해도 된다. 이 방법은 그 때 그 때 해야한다.

 



Question:

I am running into permission problems when accessing files copied through DeltaCopy Server.
Answer:One very important thing to remember is the DeltaCopy uses rsync in the background, which came from UNIX. Therefore, the concept of ACL on Windows does not translate very well with Linux/UNIX. This causes some permission problems when using DeltaCopy.

Work Around

To avoid any permission problems, run the DeltaCopy Server Service under the Administrator's account rather than System account. Go toWindows Control Panel/Administrative Tasks/Services, select DeltaCopy Server service and go to Properties. Select the "Log On" tab and specify Administrator as the login name.

Every copied file on the server machine will be owned by the user who runs the DeltaCopy Server Service. Therefore, using Administratorwill allow the admins to access these files.

What happens if I already have used the System Account

Quite often users use the Built-in System Account initially and then switch the user at a later time. In this case all files that were copied under the System Account will be owned by "System Account" and no one else will have permission to access them. In that case follow the steps below.

If you are running an older version of DeltaCopy, you might not have this "Fix File Permissions" menu item. In that case you will have run the following command in CYGWIN to change the ownership.

chmod 777 *.*


,

사진을 날짜별로 정리해 주는 프로그램인 GomPhoto 입니다. (동영상도 가능)


공식홈페이지

http://whria.net

http://gomphoto.com

 

 



 

날짜 + 이름 으로 정리해주는 프로그램입니다.


사진뿐 아니라 동영상까지 안에 있는 정보를 얻어내서 정리해줍니다.

 

setup.exe


,

GMA500 은 DXVA 를 지원해서 넷북으로 720p 재생이 가능하다.


하지만 DXVA 가 켜져도 팟플레이어나 곰플레이어 기본 셋팅으로는 PowerDVD 10,12 등 상용 코덱을 사용해도 1024*768 에서는 15~20 fps, 800*600 에서는 25~30 fps 정도 밖에 안나온다.


이래저래 고생을 하다가 아래와 같은 조건에서 1024*768 에서 30 fps 재생에 성공하였다.


Windows 7, Intel 의 정식 최신 정식드라이버 (2010)

http://downloadcenter.intel.com/SearchResult.aspx?lang=eng&ProductFamily=Graphics&ProductLine=Laptop+graphics+drivers&ProductProduct=Intel%C2%AE+Graphics+Media+Accelerator+500


MPC-HC , Fullscreen 옵션에서 D3D On

http://mpc-hc.sourceforge.net/downloads/



참고로 MPC-HC 에서도 DXVA 가 on 이더라도 D3D 옵션이 없으면 Full screen 모드에서 30 fps 이 나오지 않는다.


,

 KT 를 포함한 인터넷 사업자(이하 KT)에서 공유기로 여러 컴퓨터를 사용하다보면 인터넷 익스플러어에서 인터넷 제한이 되고 돈을 더 내라는 메세지가 뜹니다.

 

 

# KT 에서는 어떻게 집에 있는 컴퓨터에 대한 정보를 수집할까? 

 

 KT 에서는 사용자가 http://daum.net 이라고 치면 http://daum.net 만 보여주는 것이 아니라 아래같은 방법으로 안보이는 프레임내에서 자신들의 자바프로그램을 실행시켜서 사용자의 정보를 빼갑니다. 이러한 작업은 인터넷 익스플로어(IE) 를 포함한 모든 인터넷 브라우저(크롬, 사파리 등)에서 기술적으로 가능합니다.

 

 KT 는 자신들의 자바스크립트를 몰래 실행시켜서 사용자의 운영체제, 브라우저, 내부 IP 등의 정보를 가져갑니다. 인터넷 검색을 할 때 인터넷 브라우저는 User Agent String 이라고 하는 정보(http://useragentstring.com)를 보내는데 이 정보 안에 사용자 환경이 들어가 있고 자바스크립트를 통해 사용자의 내부 IP 를 알아낼 수 있습니다. 

 

 정보 수집은 항상 실행되는 것은 아닌것 같고 토렌트 등으로 트래픽을 많이 유발하는 사용자를 중심으로 이루어지는 것 같습니다. 그리고 정보 수집도 항상 이루어지기보다는 가끔씩 이루어지고 통계를 내서 어느 수준이상 넘어가면 제제를 하는 것 같습니다.

 

 

<html>
<frameset rows='0,*' border='0'>
<frame src='/xs_btn/uxcn.asp?n=2&u=8825&i=0&y=0&m=0&k=0&t=N&b=78&s=600&x=www.daum.net&d=2008-01-01'>
<frame src='http://www.daum.net/?' name='rosea'>
</frameset>
<body oncontextmenu="return false" onselectstart="return false" ondragstart="return false">
</body>
</html>

 

 

# 회피 방법 

 

1) User Agent String 을 속여서 KT 의 정보 수집을 방해한다.

 

UAPickSetup.exe

 

사용법

http://www.howtogeek.com/howto/18450/change-the-user-agent-string-in-internet-explorer-8/

 

 첨부한 파일은 인터넷 익스플로어(IE8, IE9) 에서 User Agent String 을 속이는 프로그램입니다. User Agent String 을 Chrome 이나 Firefox 로 바꾸면 IE 를 사용하지 않는 것처럼 속일 수 있습니다. 현재는 KT에서 IE 를 사용하는 컴퓨터만 대수를 세는 것 같습니다.

 운영체제도 Linux, Mac 이나 안드로이드, 아이폰같은 스마트폰 OS 를 쓰는 것으로 속일 수 있습니다. 운영체제까지 User Agent String 로 속이면 KT 에서는 컴퓨터를 쓰는지 스마트폰을 쓰는지 확인할 방법이 없습니다. 하지만 운영체제까지 속이면 컴퓨터에서 인터넷 브라우저를 띄워도 스마트폰 전용 화면이 보이는 경우가 있으므로 테스트 해보고 사용하길 바랍니다.

 집에 컴퓨터가 2대 이상이 있다면 자주 안 쓰는 컴퓨터의 User Agent String 을 속여주면 됩니다. 컴퓨터가 아닌 휴대폰으로 속일 수도 있고 Linux 컴퓨터로 속일 수도 있습니다.


 cf) 첨부한 파일 UAPickSetup 에는 몇가지 User Agent String 이 예제가 들어있다. 하지만 좀 더 자세히 고치기를 원한다면 아래 site 를 참조해서 자신이 원하는 User Agent String 을 만들어서 넣어도 된다.

http://user-agent-string.info/list-of-ua 

 

 

 

 2) 프락시(proxy) 를 사용한다.

 

 KT 의 정보 수집은 인터넷 브라우저 (80 포트) 를 통해 이루어집니다. 80 포트를 프락시 프로그램을 이용해서 사용하면 KT 는 정보 수집을 할 수 없습니다. 인터넷 대수 제한이 없는 컴퓨터나 리눅스 서버에 프락시 프로그램 ( Squid 등 ) 을 실행하는 방법이 있습니다. 하지만 이 방법은 사용자 대수에 자유로운 외부 서버가 있어야 합니다.

,

http://www.howtogeek.com/howto/18450/change-the-user-agent-string-in-internet-explorer-8/


IE 를 다른 브라우저로 속이는 애드온입니다.

잘하면 KT 의 공유기 제한 푸는데 이용가능할 것 같네요.



UAPickSetup.exe



아래는 사용법



Change the User Agent String in Internet Explorer 8

Do you need on-demand user agent string switching while browsing with Internet Explorer 8? If so then you will want to have a look at UAPick User-Agent Switcher.

A User Agent String identifies your browser and system details to sites you go to. It will identify your browser, version number, and details about your system. This allows a web server to use the information to provide content specific to your browser. If you want to change the value of the data being sent, using the UAPick User-Agent Switcher will do the job in IE 8.

Installing UAPick User-Agent Switcher

We chose to install UAPick User-Agent Switcher from the IE Add-ons gallery but it can also be installed/downloaded from the homepage (link provided below).

ie-user-agent-switcher-01

Click on Run when the appropriate window appears.

You will need to confirm the installation once the temporary installation file has downloaded.

The default install location will be in the Program Files area.

Once the installation has finished you will see a message about where to find the switch command and that it will be available the next time you start Internet Explorer.

UAPick User-Agent Switcher in Action

Before changing the user agent string on our browser we did a quick I.D. check to verify our settings.

To change the user agent string go to the tools menu and select the Set UA String listing.

Note: The user agent string will automatically switch back to the original default each time you restart Internet Explorer.

A new temporary window will open with details for the current string visible.

Open the drop-down menu and select the desired user agent string.

For our first example we chose “Konqueror, Debian”. Click on the save button when you are finished.

You will be presented with a new window showing the details for the new user agent string.

Refreshing our browser displayed a successful switch.

For our second and final example we chose the “Netscape 3, Win 95” listing. Another success…

Conclusion

Whether out of necessity or just for fun UAPick User-Agent Switcher provides you with a nice assortment of user agent strings to use while browsing.

Links

Add UAPick User-Agent Switcher to Internet Explorer 8 (IE 8 Add-ons Gallery)

Add UAPick User-Agent Switcher to Internet Explorer 8 (UAPick Homepage)

Learn More About User-Agent Strings

,

아래글이 원본입니다.


간단히 설명하면 http://prettygom.com 으로 접속해도 KT 에서 prettygom.com + 자신들의 프로그램 을 동시에 보내주는거죠. 자신들의 프로그램을 실행시켜서 내부 IP 정보를 얻는다고 합니다.



http://www.mapoo.kr/entry/%EC%82%AC%EC%95%85%ED%95%9C-KT%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B3%B5%EC%9C%A0%EA%B8%B0%EB%A5%BC-%EA%B2%80%EC%B6%9C%ED%95%98%EB%8A%94%EA%B0%80?category=30


KT 공유기 이용제재 조치 개념도

2005 년 KT는 자사의 인터넷 라인에 공유기를 꼽아 여러 대의 IP를 따서 사용하는 유저를 식별할 수 있는 시스템, 즉 공유기 검출 시스템 개발에 성공했다고

발표

했습니다.

하지만 이것이 기술적으로 완벽하지 않다는 반론과 함께, 기존 사용자들의 거센 반발로 인해 사용 가능 PC를 2대로 제한한다는 정책으로 선회한 뒤 이 문제는 그대로 묻히나 했는데... 작년부터 KT와 하나로 사용자들을 중심으로 인터넷 연결 중 이상한 현상에 대한 보고가 들어오기 시작합니다. 참고1,참고2

이를 정리하면, KT등의 ISP(인터넷 서비스 공급자, Internet Service Provider) 라인을 사용하는 유저들이 웹브라우저로 특정 사이트에 접속할 때, KT에서는 임의로 공유기 검출을 위해 특정 서버로 먼저 요청을 보낸 다음, 사용자가 요청한 페이지로 다시 이동시킨다는 것입니다.참고3

명목상 이런 과정은 "접속 환경 개선을 위한 속도 테스트"나 "불량 사이트 차단"을 위한 것이라는 설명을 많이 하는데, 실제로 앞에서 얘기한 KT 서버에서 하는 일은 사용자가 공유기를 사용하는지를 체크하는 것입니다. 그럼 이런 과정이 어떻게 일어나는지 한 번 추적해 보겠습니다.

로직 추적

보통의 경우라면 바로 www.jinbo.net으로 요청이 전달되어 진보넷 페이지가 브라우저에 뜨게 됩니다. 하지만 공유기 검출 로직이 실행되는 중이라면 요청한 주소는 다음과 같은 HTML로 치환되어 보내집니다.

<HTML>
 <HEAD></HEAD>
  <FRAMESET border=0 frameSpacing=0 rows=0,* frameBorder=0>
  <FRAME name=dolla src="http://221.147.67.202/headseed.asp">
  <FRAME src="http://221.147.67.202/xs_btn/uxcsdo.asp?n=2&u=8825&i=0&y=0&m=0&k=0&t=N&b=78&x=www.jinbo.net&s=600&d=2008-01-01">
</FRAMESET>
</HTML>

화면이 두 개의 프레임으로 나뉘고, 둘 다 특정한 KT 서버에 요청이 갑니다. 이 중 첫 번째 요청(http://221.147.67.202 /headseed.asp)은 서버에서 정확히 어떤 일을 하는지 알 수 없고 단지 빈 HTML이 돌아올 뿐입니다. 여기서 주목해야 할 것은 두 번째 요청입니다.

<html>
<frameset rows='0,*' border='0'>
<frame src='/xs_btn/uxcn.asp?n=2&u=8825&i=0&y=0&m=0&k=0&t=N&b=78&s=600&x=www.jinbo.net&d=2008-01-01'>
<frame src='http://www.jinbo.net/?' name='rosea'>
</frameset>
<body oncontextmenu="return false" onselectstart="return false" ondragstart="return false">
</body>
</html>

응답의 결과로 역시 두 개의 프레임을 나눠서 줍니다. 첫 번째 프레임은 hidden 처리되어 특정 코드를 수행하고, 두 번째 프레임은 요청한 주소의 페이지를 보여줍니다. 결과적으로 화면에는 진보넷 페이지가 보이게 되니까 사용자는 크게 문제점을 인식하지 못할 가능성이 높습니다. 하지만 실제로는 사용자가 눈치채지 못하게 첫 번째 프레임의 동작이 실행되는 셈입니다. 그럼 첫 번째 프레임의 요청을 따라가 봅시다.

<input type='hidden' id='PTe' value='http://www.jinbo.net' target='_top'>

<script language='javascript'>
  var tcheck = document.cookie;
  window.onload = gonogo;

  function gonogo() {
    if (tcheck == ) {
      if (navigator.appName == 'Microsoft Internet Explorer') {
        document.all.PTAe.click();
      }
      if (navigator.appName == 'Netscape') {
        self.location.href=document.getElementById('PTe').value;
      }
    } else {
      today = new Date();
      var YY, MM, DD;
      YY = today.getYear();
      MM = today.getMonth()+1;
      DD = today.getDate();
      self.location.href='uxcn01.asp?mode=SSL3H&n=2&ha='+YY+'&ba='+MM+'&ya='+DD+'&x=www.jinbo.net&i=0&y=0&m=0&k=0&t=N&b=78&u=8825&d=2008-01-01';
    }
  }
</script>
<html>
<head>
  <title></title>
  <meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
</head>
<body oncontextmenu="return false" onselectstart="return false" ondragstart="return false">
</body>
</html>

특정한 스크립트가 응답으로 날아옵니다. 페이지가 로드되면서 스크립트를 실행시켜 쿠키가 있는 경우 날짜와 기타 정보들을 파라미터로 심고 특정 사이트로 다시 보내버립니다. 다시 페이지로 따라가 보겠습니다.

<SCRIPT LANGUAGE="JavaScript">
</SCRIPT>
<input type='hidden' id='PT' value='http://www.jinbo.net' target='_top'>

<script language='javascript'>
  if (navigator.appName == 'Microsoft Internet Explorer') {
    window.onload = function() {
      document.all.PTA.click();
    }
  }
  if (navigator.appName == 'Netscape') {
    window.onload = function() {
      self.location.href=document.getElementById('PT').value;
    }
  }
</script>

역시 다른 페이지로 보내버립니다. 또 따라가 봅시다.

<HTML><HEAD><TITLE>Untitled Document</TITLE>
<META http-equiv=Content-Type content="text/html; charset=euc-kr">
<SCRIPT language=javascript>
<!--
//오늘은 더이상 팝업 윈도우를 띄우지 않습니다 
function GetCookie( name )
{
  var nameOfCookie = name + "=";
  var x = 0;
  while ( x <= document.cookie.length )
  {
    var y = (x+nameOfCookie.length);
    if ( document.cookie.substring( x, y ) == nameOfCookie ) {
      if ( (endOfCookie=document.cookie.indexOf( ";", y )) == -1 )
        endOfCookie = document.cookie.length;
      return unescape( document.cookie.substring( y, endOfCookie ) );
    }
    x = document.cookie.indexOf( " ", x ) + 1;
    if ( x == 0 )
      break;
  }
  return "";
}

//**********************************************************************************************************************

popup();

function popup()
{
  var g1 = "78";
  var n_type = "2";
  var u_idx = "8825";
  var cnt_g = "0";
  var cnt_i = "0";
  var msgUrl = "";
  var width = "";
  var height = "";		
  var msgUrl2 = "";
  var width2 = "";
  var height2 = "";
  var total = "0";
  var xt = "www.google.com";
  var dsa = "2008-01-01";
  var mainsvIP = ""; //임시 (공유기 서비스가입)

  var tmpwin = "";
  var tmpwin2 = "";
  var param = "";
  param = "g1="+g1+"&u_idx="+u_idx+"&cnt_g="+cnt_g+"&cnt_i="+cnt_i+"&total="+total+"&xt="+xt+"&mainsvIP="+mainsvIP+"&dsa="+dsa;

  if (n_type != 2 && msgUrl != "") // 유도
  {
    url = "evsol.asp?n_type="+n_type+"&"+param+"&msgUrl="+msgUrl;
    tmpwin=window.open(url,"pop1","width="+width+",height="+height+",top=0,left=0");
  }

  if (msgUrl2 != "") // 일반
  {
    //오늘은 더이상 팝업 윈도우를 띄우지 않습니다 if 문
    var erer = GetCookie("Notice");
    if ( erer != "done" )
    {
      url2 = "evsol.asp?n_type=1&"+param+"&msgUrl="+msgUrl2;
      tmpwin2=window.open(url2,"pop2","width="+width2+",height="+height2+",top=0,left=370");
      //tmpwin2.focus();
    }
  }

  if (n_type == 2)
  {
    var strHTML = "<APPLET CODE='fnqlxmfhvl.class' WIDTH='1' HEIGHT='1' name='Internet_Loading'>";
    strHTML += "<PARAM NAME='URL' VALUE='dotori_app.asp?b=78&n=2&u=8825&i=0&y=0&t=0&x=www.daum.net&re_ip='>";
    strHTML += "<PARAM NAME='TARGET' VALUE='_self'>";
    strHTML += "</APPLET>";	
    document.write (strHTML);
  }
} // popup() end

//-->
</SCRIPT>
</HEAD>
<BODY oncontextmenu="return false" onselectstart="return false" ondragstart="return false"></BODY></HTML>

드디어 정말 하고 싶었던 일을 하는 페이지가 나왔습니다. 이 복잡한 과정의 목적은 결국 공유기 사용자에게 경고 팝업을 띄우고, fnqlxmfhvl.class란 java 애플릿을 실행시키는 것입니다. 일단 fnqlxmfhvl.class가 무엇을 하는지 다운받아 리버스 컴파일해 보았습니다.

  • fnqlxmfhvl.java
import java.applet.Applet;
import java.applet.AppletContext;
import java.net.*;

public class fnqlxmfhvl extends Applet
{
  public fnqlxmfhvl()
  {
    flema = "";
    mkbro = "unknown";
    fx0073 = "";
  }

  public void init()
  {
    mkbro = rusianxx();
    if(getParameter("URL") != null)
    {
      fx0073 = getParameter("URL");
      fx0073 = fx0073 + mkbro;
      if(getParameter("TARGET") != null)
        flema = getParameter("TARGET");
    }
  }

  public void start()
  {
    try
    {
      URL url = new URL(getDocumentBase(), fx0073);
      getAppletContext().showDocument(url, flema);
    }
    catch(Exception exception) { }
  }

  private String rusianxx()
  {
    String s = "";
    String s1 = getDocumentBase().getHost();
    int i = 80;
    if(getDocumentBase().getPort() != -1)
      i = getDocumentBase().getPort();
    try
    {
      s = (new Socket(s1, i)).getLocalAddress().getHostAddress();
    }
    catch(Exception exception) { }
    return s;
  }

  String flema;
  String mkbro;
  String fx0073;
}

이 프로그램이 하는 일은 매우 간단합니다. 사용자의 내부 IP를 알아낸 다음, 이 IP를 dotori_app.asp로 전송해 줍니다. dotori_app.asp로 요청을 보냈을 때 특별한 응답은 날아오지 않았지만, 짐작으로는 아마 dotori_app.asp에서 사용자의 내부 IP를 받아 공유기를 사용한 IP인지, ISP에서 정상적으로 발급한 IP인지를 판단할 것입니다.

로직 설명

일반적으로 KT나 하나로텔레콤 등의 ISP는 사용자에게 유동 IP를 발급합니다. 유동 IP는 모뎀이 ISP에 접속할 때마다 일정 범위 내에 있는 IP를 발급해 주는 IP입니다. 사용자가 ISP에서 제공하는 라인을 컴퓨터에 바로 꽂아 쓰는 경우에는 사용자 PC의 IP는 외부에서나 내부에서나 ISP가 발급한 유동 IP로 동일하게 됩니다.

하지만 공유기를 사용하게 되면 약간 다른 상황이 발생합니다. 공유기는 하나의 외부 IP를 여러 개의 내부 IP로 분할해 사용 가능하게 해 줍니다. 이 경우 유동 IP는 공유기가 갖게 되고 사용자의 PC는 공유기가 발급한 내부 IP를 사용하게 됩니다. 따라서 사용자 PC의 IP는 10.0.0.2나 192.168.0.2 같은 형태의 내부 IP가 됩니다. 하지만 외부에서 볼 때 사용자 PC의 IP는 공유기가 가지고 있는 IP, 즉 ISP가 발급한 외부 IP로 보이게 되죠. 따라서 이 경우는 외부 IP와 내부 IP가 달라지는 현상이 발생합니다.

어쨌든 ISP는 사용자들이 공유기를 사용하여 여러 대의 PC가 한 개의 라인에 물려있는지 판단할 수 있는 작업을 사용자 몰래 하고 있는 셈입니다. 현실적으로 집에서 2~3개의 PC를 공유기로 사용하는 경우는 크게 문제를 삼고 있지 않지만, 사무실 등에서 10개 이상의 PC가 한 개의 공유기를 통해 사용하는 경우는 적발하여 추가적으로 라인을 구매하도록 유도하고 있다고 합니다. 이런 경우를 알 수 있는 것도 이러한 공유기 검출 시스템이 있기 때문이죠. 아마 사용자의 약관 어딘가에 사용자 동의 없이 하는 이런 작업을 정당화 하는 문구도 넣어놨으리라 생각됩니다.

결론

현실적으로 ISP에서 제공하는 망을 사용하는 이상, 개인 PC에 침입하여 벌어지는 이런 일들을 막기가 매우 어렵습니다. 어떻게 보면 인터넷 세상의 진정한 지배자는 ISP가 아닐까요...

(글이 너무 길어져서 공유기가 어떻게 IP를 분배하는지는 다른 글에서 다루도록 하겠습니다.)

,