국내에서 미국(US) 프록시를 이용하여 미국쪽 서비스에 접근하려는 경우는 너무 흔하게 많이 알고있고

불순한 의도(?)에 의해 많이 하고있다.


하지만 오늘 소개할 방법은 기존의 방법을 사용할 수 없는 환경에서

미국(US) 프록시가 아닌 우리나라(S.Korea) 프록시를 이용하여 해외에 접속해보고자 한다.


또한 왜 이 짓을 해야하는지도 한번 알아보자.


# 문제상황

1. 목표 시스템은 PHP 환경이며, fopen, file_get_contents이 URL을 통해 외부자료를 참조하는 것을 막았다.

2. 외부와 연결이 가능한 것은 cURL 뿐이지만, 공교롭게도 서버 설정이 해외 접속을 완전히 차단하고 있다.

3. 나는 REST(URL을 이용한 GET/POST 전송) 환경으로 미국(US)에 소재한 서버에서 데이터를 받아와야한다.


# 해결하기

이러한 상황에서 프록시를 사용한다면 일반적으로 사용하는 미국(US) 프록시에 의한 우회를 생각하기 쉽다.


그런데 뭔가 이상하다. 모든 해외 접속을 차단했는데 미국 프록시를 사용할 수 있을까?

지나가던 개가 웃는다.


그럼 어떤 식으로든 서버 측에서는 한국에 소재한 컴퓨터(IP 주소)끼리만 통신할 수 있다는 뜻이다.


<우리가 받아야 할 자료, 서버위치: 미국(US)>


{ "foo": true, "bar": false, "blah": "blah blah" }


<서버측에서 PHP와 cURL로 요청하는 예시, 서버위치: 한국(S.Korea)>


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, (목표 주소));
(생략)

$result = curl_exec($ch);
curl_close($ch);


이런 환경에서 아무리 국내 서버에서 요청을 해봤자, 헛수고에 불과할 뿐이다.


그렇다면 어떤 방법을 쓰면 될까?

내 서버가 해외에 접속할 수 없다면, 해외에 접속할 수 있는 컴퓨터를 거치면 된다.


이를 위해 cURL 요청 시 아래와 같은 내용을 하나 추가한다.


curl_setopt($ch, CURLOPT_PROXY, "(해외접속이 가능한 국내 프록시 주소)");


이로써 미국(US) 서버와 한국(S.Korea) 서버 간의 접속은 성립된다.


# 언제 쓰는거?

소셜 네트워킹이나 다른 기능을 지원하는 서비스와

자신의 서버(웹호스팅)을 연결할 때 해외 접속이 완전 차단된 환경에서 사용하게 된다.


이러한 방법을 통해 해외 접속이 지원되는 환경으로 갈아타지 않고도 즉석에서 적용이 가능하다.

하지만 임시방편에 불과함으로 서비스 트랜젝션이 상승할 시에는 해외접속이 지원되는 온전한 서버로 갈아타야한다.


# 응용 분야

국내에서 외국이 아닌 국내 프록시를 사용하는 이유 중에 하나는 부하 분산이다.

이 글에서는 단순히 해외 접속용도만을 다루었지만 부하 분산을 위한 프록시 서버 사용법에 대해서도

알아볼 분들은 찾아서 알아보면 좋겠다. 키워드: 로드 밸런싱, 로드 밸런서


by 광은통신 웃는하루 2015.09.30 06:35

공유기와 허브의 차이에 대해 찾다보면

써보지 않은 사람들이 보기에는 매우 난해하게 설명이 되어있다.


"공유기는 IP를 할당안받고도 쓸 수 있고, 허브는 IP 할당받아야 쓸 수 있다."

"공유기는 포트 수가 적은 편이고 허브는 많은 편이다."


What the fuck? 설명에다가 뭔 멍멍이 소리를 써놓고 있는지 당최 알 수가 없다.


공유기도 IP 할당받아야 쓸 수 있고, 공유기도 포트 수 늘리려면 제조사가 마음만 먹으면

얼마든지 늘릴 수 있다.

그럼에도 저런 식으로 난해하게 된 설명은, 초보자에게 혼란만 야기시킬 뿐이다.


** 공유기와 허브의 가장 확실한 차이는 네트워크의 위상차이다!


공인 IP를 단 하나만 가지고 있다면 4가지 중 어느 구성으로 네트워크를 구축하는 것이 맞을까?

1. 30대의 컴퓨터가 있고, 30대의 컴퓨터를 모두 허브로 연결한다.

2. 30대의 컴퓨터가 있고, 30대의 컴퓨터를 모두 공유기로 연결한다.

3. 30대의 컴퓨터가 있고, 공유기를 거친 후 허브로 30대의 컴퓨터를 연결한다.

4. 30대의 컴퓨터가 있고, 허브를 거친 후 공유기로 30대의 컴퓨터를 연결한다.


공유기와 허브의 가장 큰 차이는 위와 같은 간단한 질문에서 시작한다.

저 질문에 대한 해석을 해보자.


1번과 2번, 3번과 4번은 물리적 토폴로지(위상도) 구성이 같다. 다만 논리적 토폴로지의 차이를 보인다.

이 말을 듣고 어렵게 느껴지는 것이 당연하다. 아래의 표로 확인해보자.


사례 

 물리적 토폴로지

 논리적 토폴로지

 30대의 컴퓨터가 있고, 30대의 컴퓨터를 모두 허브로 연결한다.

 중앙 네트워크에 30대의 컴퓨터가 연결된 구조.

 중앙 네트워크에 30대의 컴퓨터가 연결된 구조. 30대의 컴퓨터는 각각 공인 아이피를 가지며, 이때 필요한 공인 아이피의 수는 30개이다.

 30대의 컴퓨터가 있고, 30대의 컴퓨터를 모두 공유기로 연결한다.

 중앙 네트워크에 30대의 컴퓨터가 연결된 구조.

 중앙 네트워크에 30대의 컴퓨터가 연결된 구조. 30대의 컴퓨터는 각각 사설 아이피를 가지며, 이때 필요한 공인 아이피의 수는 1개이다.

 30대의 컴퓨터가 있고, 공유기를 거친 후 허브로 30대의 컴퓨터를 연결한다.

 중앙 네트워크 하위에 존재하는 장비를 거쳐 30대의 컴퓨터가 연결된 구조.

 중앙 네트워크에 1대의 컴퓨터가 연결된 구조. 30대의 컴퓨터는 각각 사설 아이피를 가지며, 이때 필요한 공인 아이피의 수는 1개이다.

 30대의 컴퓨터가 있고, 허브를 거친 후 공유기로 30대의 컴퓨터를 연결한다.

 중앙 네트워크 하위에 존재하는 장비를 거쳐 30대의 컴퓨터가 연결된 구조.

 중앙 네트워크에 n+1대의 컴퓨터가 연결된 구조. 30대의 컴퓨터는 n+1 중 n을 제외한 1대의 컴퓨터가 중앙 네트워크에 연결된 구조. 30대의 컴퓨터는 각각 사설 아이피를 가지며, 이때 필요한 공인 아이피의 수는 n+1개이다.

 30대의 컴퓨터가 있고, 허브 2포트에 공유기 한대씩 연결시켜 각각 15대 씩 연결한다.

중앙 네트워크 하위에 존재하는 장비 2대를 거쳐 30대의 컴퓨터가 연결된 구조.

 중앙 네트워크에 n+2대의 컴퓨터가 연결된 구조. 30대의 컴퓨터는 n+2 중 n을 제외한 2대의 컴퓨터가 중앙 네트워크에 연결된 구조. 30대의 컴퓨터는 15대 씩 한 묶음으로 각각 다른 사설 IP 대역에 따라 아이피를 가지며, 이때 필요한 공인 아이피의 수는 n+2개이다.


내가 써놓고 보지만 참 누가봐도 어렵게 썼다.


즉 결론은,

허브로 연결된 컴퓨터끼리는 상위 네트워크의 허브로 연결되지 않은 컴퓨터들과 위상이 같고

공유기로 연결된 컴퓨터끼리는 상위 네트워크의 공유기로 연결되지 않은 컴퓨터들과 위상이 한단계 차이가 난다.

라는 것이다.


그렇기에 허브는 컴퓨터가 1대 연결될 때마다 공인 아이피를 요구하는 것이고, 공유기는 1개의 공인 아이피만으로 여러대의 컴퓨터를 연결할 수 있는 것이다.


공유기와 허브 차이를 어려워하시는 분들이 있어서 작성해보았다.

이러한 공유기와 허브의 차이를 익혀두면 TCP/IP의 패킷을 조작하는 각종 해킹 기술에 대한 이해도

수월하기 때문에 알아두면 도움이 된다.


by 광은통신 웃는하루 2015.08.03 07:10

<문제 상황>

Vmware ESXi 사용자가 Vmware vSphere를 통해 로컬에서 원격 Datastore로

파일 업로드를 진행할 시 "Failed to login to NFC server" 오류가 뜬다.


<해결 방법>

네트워크 문제가 주가 되는 오류이므로, vSphere에 설정된 네트워크 설정을 다시 확인해본다.

포트 차단이 문제가 되는 경우가 있으므로, 902번 포트를 열어놓도록 하자.


<참고 문서>

http://www.veeam.com/kb1198

by 광은통신 웃는하루 2015.07.16 01:12

최근 자바스크립트에서도 MVC 모델이 주목을 받으면서, AngularJS가 주목을 받고있다.

하지만 대부분의 웹사이트는 이러한 MVC 모델로 설계되지 않아 개발 상에서 적용이 힘든 경우가 많다.

 

개발자의 능력이 점점 세분화되어 감에 따라 협업과 소스 관리의 용이함을 위해서는

개발 요소에 대한 분리(MVC의 경우, 모듈, 뷰, 컨트롤러이다)가 진행되면 많은 도움이 된다.

 

이 포스트에서는 MVC 모델 대신 우리에게 '템플릿'으로 더 많이 알려진 방식을 사용하는 프레임워크

JSrender, JSviews에 대해 알아보자


클라이언트 사이드 자바스크립트에서 MVC 프레임워크를 사용할 수 없는 환경에서

템플릿(뷰)를 분리하고자 할 때 유용하게 활용할 수 있을 것이다.

 

1. JSrender, JSview 살펴보기


JSrender는 아래와 같은 상황을 개선하기 위해 만들어졌다. (제이쿼리 AJAX 예제)


$.ajax((

    dataType: "json",

    url: "load.aspx",

    success: function(data) {

        $(selector).append('<li>' + data.one + '</li>');

    }

});


스크립트 안에 들어있는 HTML 태그를 템플릿 형태로 분리함을 목적으로 한다.

그리하여 분리된 템플릿은 아래와 같은 모양을 가진다.


<li>{{:one}}</li>


물론 위 예시는 템플릿을 별도의 파일로 분리하였을 때 예시이다. 분리하지 않을 때는 아래처럼 선언한다.


<script id="theTmpl" type="text/x-jsrender">

<li>{{:one}}</li>

</script>


선언을 하면 이를 뿌려줄(Rendering)할 메소드 또한 필요한데, 사용법에서 자세히 살펴보도록 하자.


2. 사용법


1) 템플릿을 파일로 분리하지 않을 때

JSrender, JSviews에서 제시된 기본 예제는 템플릿 파일이 분리되지 않은 예제이다. 확인해보자.


<div id="result"></div>

<script id="theTmpl" type="text/x-jsrender"> <!-- 템플릿 선언 -->
<div>
   <em>Name:</em> {{:name}}
   {{if showNickname && nickname}}
      (Goes by <em>{{:nickname}}</em>)
   {{/if}}
</div>
</script>

<script> <!-- 데이터 선언 -->
var data = [
  {
    "name": "Robert",
    "nickname": "Bob",
    "showNickname": true
  },
  {
    "name": "Susan",
    "nickname": "Sue",
    "showNickname": false
  }
];

var template = $.templates("#theTmpl"); <!-- 템플릿 선언 위치 지정 -->

var htmlOutput = template.render(data); <!-- 렌더링 진행 -->

$("#result").html(htmlOutput); <!-- 렌더링 결과 뿌려줌 -->
</script>


템플릿을 파일로 분리하지 않을 때 기본 사용법은 이렇다. 그렇다면 파일을 분리하고자 한다면?


2) 템플릿을 별도의 파일로 분리할 때

템플릿을 별도의 파일로 분리하고자 할 때의 예제이다. 제이쿼리에서는 when-done 메소드를 지원하는데

이를 이용하여 템플릿을 적용하는 예제이다.


// 템플릿 로드 함수
var renderExternalTmpl = function(item) {
    var file = relative_path + '/ajax/' + item.name + '.tmpl.html';

    $.when($.get(file))
     .done(function(tmplData) {
         $.templates({ tmpl: tmplData });
         $(item.selector).html($.render.tmpl(item.data));
     });   
}


$.ajax((

    dataType: "json",

    url: "load.aspx",

    success: function(data) {

        renderExternalTmpl({ name: 'comment', selector: "#result", data: data });

    }

});


이렇게하면 외부 파일을 템플릿으로 사용하여 불러오는 것이 가능해진다.


3) 루프(FOR)를 돌려야 할 때


루프를 돌려야할 때는, 받은 JSON 데이터가 아래의 형식을 만족하여야 한다.


{ "title": "alphabets", "list": [

    { "code: "ab", "fruit": "apple"},

    { "code": "cd", "fruit": "banana"},

    { "code": "ab", "fruit": "kiwi"}

]}


템플릿 파일에서 아래처럼 적용하면 루프도 가능해진다.


{{for list}}

<li>code: {{:code}}, fruit: {{:fruit}</li>

{{/for}}


4) 루프 내 외부 변수(External/Parent Variable) 선언이 필요할 때

루프 내에서 사용할 변수도 선언 가능하다. 아래처럼 하면 된다.

부모 변수에 대한 접근이 필요하다면, 아래처럼 부모 변수를 넣어주면 된다.


{{for list ~num=num}}

<li>code: {{:code}}, fruit: {{:fruit}</li>

{{/for}}


3. 실제 사용해보기


코드 작성을 완료 한 후 AJAX 성공 시 템플릿이 적용되도록 했으므로, AJAX 실행 후 정상 출력되는지 확인한다.


4. 참고 사이트


https://msdn.microsoft.com/en-us/magazine/hh975379.aspx

http://jsreport.net/learn/jsrender

http://www.jsviews.com/#jsrender

http://stackoverflow.com/questions/10413894/store-a-jsrender-template-in-a-separate-js-file


'웹서비스개발 > 라이브러리 소개' 카테고리의 다른 글

jsrender, jsviews 소개 및 사용법  (0) 2015.06.03
by 광은통신 웃는하루 2015.06.03 23:52

<문제 상황>

CentOS 6에서 Snorts를 설치하던 중

Dynamic Preprocessor와 Dynamic Rules를 찾을 수 없는 문제가 발생한다.

 

관련 키워드: snort_dynamicpreprocessor, white_list.rules, black_list.rules

 

<해결 방안>

 

1. snort_dynamicpreprocessor 문제

Snort는 preprocessor라는 기능을 지원하는데 이때 컴파일 된 라이브러리를 /usr/local/lib에 담게된다.

일반적으로 CentOS 환경이라면 제공되는 rpm 파일을 통해 설치하지만, 실제 진행하면 라이브러리가 설치가 안되는 모양이다.

 

그럴땐 rpm(yum)을 통해 필요한 내용을 모두 설치한 다음, 코드 컴파일로 daq와 snort 설치를 한번 더 해주자.

 

# wget https://www.snort.org/downloads/snort/daq-2.0.4.tar.gz
# wget https://www.snort.org/downloads/snort/snort-2.9.7.2.tar.gz

# tar xvfz daq-2.0.4.tar.gz
# cd daq-2.0.4
# ./configure
# make
# sudo make install

# tar xvfz snort-2.9.7.2.tar.gz
# cd snort-2.9.7.2
# ./configure --enable-sourcefire
# make
# sudo make install

 

2. dynamic rules 문제

Snort의 preprocessor 중에는 reputation 항목이 존재한다. (/etc/snort/snort.conf 참고)

 

여기서 화이트 리스트, 블랙 리스트 룰을 불러오는 내용이 있는데

초기 상태의 snort 설치에서 이런 룰이 준비되어 있을리 만무하다. 있는게 수상한거다(?)

이럴 땐 공란 파일하나 만들어주자.

 

# touch /etc/snort/rules/while_list.rules

# touch /etc/snort/rules/black_list.rules

 

다 되었다면 정상 작동되는지 테스트해보자. 아래처럼 결과가 나오면 성공한 것이다.

# snort -T -i eth0 -u snort -g snort -c /etc/snort/snort.conf

 

(앞 내용 생략)

        --== Initialization Complete ==--

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.7.2 GRE (Build 177)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.4.0
           Using PCRE version: 7.8 2008-09-05
           Using ZLIB version: 1.2.3

           Rules Engine: SF_SNORT_DETECTION_ENGINE  Version 2.4  <Build 1>
           Preprocessor Object: SF_MODBUS  Version 1.1  <Build 1>
           Preprocessor Object: SF_REPUTATION  Version 1.1  <Build 1>
           Preprocessor Object: SF_DNS  Version 1.1  <Build 4>
           Preprocessor Object: SF_SSLPP  Version 1.1  <Build 4>
           Preprocessor Object: SF_POP  Version 1.0  <Build 1>
           Preprocessor Object: SF_SIP  Version 1.1  <Build 1>
           Preprocessor Object: SF_DCERPC2  Version 1.0  <Build 3>
           Preprocessor Object: SF_GTP  Version 1.1  <Build 1>
           Preprocessor Object: SF_DNP3  Version 1.1  <Build 1>
           Preprocessor Object: SF_SSH  Version 1.1  <Build 3>
           Preprocessor Object: SF_SDF  Version 1.1  <Build 1>
           Preprocessor Object: SF_IMAP  Version 1.0  <Build 1>
           Preprocessor Object: SF_SMTP  Version 1.1  <Build 9>
           Preprocessor Object: SF_FTPTELNET  Version 1.2  <Build 13>

Snort successfully validated the configuration!
Snort exiting

 

이제 Snort를 하나씩 즐겨보면 된다.

 

by 광은통신 웃는하루 2015.04.28 12:51

자신이 정말 능력있다 생각한다면, 그 능력을 버릴 줄도 알아야한다.


능력을 키워가라고 하는 시대에 맞지 않는 말이라 생각할 수도 있다.


하지만 자신이 정말 자신한다는 능력에 모든 시간과 열정, 자금을 소비하느라,

정작 주변 것을 챙기지 못한다면 그것은 능력이 아니다.


때론 능력을 잠시 버리고 주변을 챙기며 때를 기다려야 한다.


누군가 내 능력을 인정해주지 않는다고 한탄하지 말라.

내 능력을 스스로 버려야 하는 순간이 온 순간, 자신의 능력은 오히려 인정받은 것이다.


그 능력이 죽어가지만 않게 꾸준히 관리하자.

by 광은통신 웃는하루 2015.04.25 23:57
  • 2015.04.27 01:12 ADDR EDIT/DEL REPLY

    비밀댓글입니다

 

CentOS에 팀뷰어 설치를 시도하던 중 아래의 오류를 확인하였다.

 

# rpm -Uvh teamviewer_10.0.41499.i686.rpm
warning: teamviewer_10.0.41499.i686.rpm: Header V4 DSA/SHA1 Signature, key ID ********: NOKEY
error: Failed dependencies:
        libXinerama.so.1 is needed by teamviewer-10.0.41499-0.i686
        libXrandr.so.2 is needed by teamviewer-10.0.41499-0.i686

 

 

아래는 해결 방법이다.

 

1. 위 오류가 발생하는 경우 사용중인 CentOS 플랫폼은 x64이다.

    팀뷰어 배포는 x86(i686)에 맞춰져 있으므로 그에 맞는 의존 라이브러리를 설치하자.

 

- libXinerama.so.1 검색 결과

http://www.rpmfind.net/linux/rpm2html/search.php?query=libXinerama.so.1

 

- libXrandr.so.2 검색 결과

http://www.rpmfind.net/linux/rpm2html/search.php?query=libXrandr.so.2

 

플랫폼은 i686으로 받으면 된다.

 

2. 의존 패키지 설치

기존의 설치 방법과 동일하다. 아래는 진행 예시이다. 파일은 주소 따서 wget으로 받아 진행하면 된다.

 

 

by 광은통신 웃는하루 2015.04.24 10:34

이번에 회사는 나갔지만 그래도 올해도 지나가는데 마지막으로 했던 업무라도 간단하게나마 결산해보고자 한다.

물론 이게 기밀은 절대 아니기때문에 남길 수 있는 부분이기도 하다. ^^


국내에는 잘 알려지지 않은 프로그램이 있는데, 특이한 프로그램이라 국내 블로그에도 정보가 아예 없는 듯 하다.


여기서 소개할 소프트웨어는 ATDI 사의 ICS Designer / HTZ warfare 이다.

이 프로그램은 Radio Planning을 위한 소프트웨어이다.


라디오 플래닝이라고 하면 말 그대로 라디오(안테나)를 어디다가 세울지 계획하는 소프트웨어로

안테나 배치에 따라, 지형에 따라 신호에 어떤 변화가 있는지 가상으로 시뮬레이션 해볼 수 있는 기능을 제공한다.


* 개발사 ADTI 웹사이트 - http://www.atdi.com/


우리가 알고있는 지상파 방송사에서부터 3G, LTE 망을 구축해야하는 통신사, 항공 업계에서도 이러한 프로그램이

안테나 위치 결정에 사용된다.

특정 사람들만 사용하기 때문에 국내 인터넷에는 정보가 아예 없는 프로그램이기도 하다.


이러한 Radio Planning 소프트웨어들을 벤치마킹하여

공항용으로만 사용될 안테나 (재)배치 소프트웨어를 만드는 것이 내가 맡았던 프로젝트였다.

모든 종류의 라디오 플래닝 소프트웨어가 외산이기 때문에 국내 사정에 맞춰서 개발하는 것이 목적이였다.


중간에 하차해서 끝까지 자리는 못지켰지만... 짧은 기간동안 꽤 괜찮은 경험이였던 것 같다.

이 글을 끝으로 공항관제고도화 프로젝트는 나와 Bye Bye이다. 다음에 더 좋은 기회가 있으리라 생각한다.

by 광은통신 웃는하루 2014.12.28 03:08




계속 추가하겠습니다. (컴퓨터 관련 글이 아니라 죄송합니다. ㅠ)


* PROCEDURES FOR START-UP AND PUSHBACK OF AIRCRAFT

원본링크 바로가기


* 해외교육 결과보고 - 계류장 운영 및 관리 과정 - 한국공항공사

원본링크 바로가기

1334820577638_해외연수결과보고서SAA_계류장_운영_및_관리.hwp



* 계속 추가중

by 광은통신 웃는하루 2014.12.01 18:14

시기가 올 초 조금지난(2014년 4월)이라 더 좋은 책이 나왔을지는 모르겠습니다. ㅎㅎ

본 자료는 반응형 웹 교육을 목적으로 직접 만든 자료입니다. 도움이 되시길 바랍니다.


responsiveweb3.pdf


책에서도 알려주지 않는, 반응형 웹의 비밀!

- 개요

- 반응형 웹 왜 떴나?

- 반응형 웹 시기 이전의 레이아웃 구현방법

   # 고정형 레이아웃

   # 가변형 레이아웃

   # 고정형 CSS 그리드 시스템

   # 모바일 웹의 태동기 - 웹 표준과 접근성부터 모바일 웹까지

   # 브라우저 별로 다른 스타일을 적용

- 반응형 웹의 본격적인 시작!

   # 고정형 레이아웃, 반응형으로 변신하다!

   # 부속 요소들을 어떻게 처리하지?

   # 반응형 CSS 그리드 시스템

   # 잊혀져가던 방식의 화려한 부활 - Optimization

- 마치며

- 참고자료

- 유용한 사이트


본 파일의 내용은 운영자가 직접 작성한 것이므로,

강의 목적 등으로 활용하실 경우 댓글이나 다른 방법으로 사전 연락 바랍니다.


by 광은통신 웃는하루 2014.11.16 03:02
| 1 2 3 4 ··· 7 |