Apr 242012
 

HTTP 헤더를 분석하다 보면 브라우저 정보 혹은 사용자 정보를 쉽게 확인하는 방법중에 하나로 User-Agent 헤더를 분석하는 경우가 많다.

생각보다 많은 정보를 가지고 있습니다. 참고할만한 사이트가 있어서 공유합니다.

http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx

다른 브라우저도 비슷한 구조를 가지고 있으면, MS의 Internet Explorer 운영 환경을 파악하는데 도움이 된다. 특히 아래와 같이 OS정보는 바로 응용이 가능합니다.

그리고 추가적으로 User-Agent 정보만 모아둔 사이트도 있다.
사이트에 보면 Chrome(http://www.useragentstring.com/pages/Chrome/) 혹은 Safari(http://www.useragentstring.com/pages/Safari/)에 대한 정보도 얻을수 있다.

http://www.useragentstring.com/pages/useragentstring.php

프로그램으로 웹클라이언트를 구현할때에도 해당 값들을 이용해서 신규로 생성하거나, 흉내를 낼수 있다.

Apr 232012
 

예전에 만들었던 perl 프로그램을 실행했더니 아래와 같은 오류가 발생을 했습니다.
아마도 시스템에 기존에 패키지로 설치되었던 perl module이 upgrade가 되면서 발생된 이슈입니다.

관련된 모듈은 패키지로 설치되지 않고, CPAN Module을 통해서 설치된 모듈이라서 아래와 같은 현상이 발견이 되었습니다.

[root@localhost message]# perl xxx.pl
File::Temp version 0.18 required--this is only version 0.16 at /usr/lib/perl5/site_perl/5.8.8/MIME/Tools.pm line 14.
BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.8/MIME/Tools.pm line 14.
Compilation failed in require at /usr/lib/perl5/site_perl/5.8.8/MIME/Parser.pm line 140.
BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.8/MIME/Parser.pm line 140.
Compilation failed in require at xxx.pl line 6.
BEGIN failed--compilation aborted at xxx.pl line 6.

이런 경우에는 CPAN 모듈을 어떻게 업데이트를 할까 고민을 하다가 그냥 기존 설치된 모듈을 다시 설치를 하니 업데이트가 되더군요.
아래아 같이 기존의 CPAN 모듈 업데이트 방법으로 설치를 하면 됩니다.

[root@localhost message]# perl -MCPAN -e shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')

cpan> install File::Temp
Apr 192012
 

Windows Vista부터 윈도우 사이드바를 통해서 가젯(Gadget)을 지원하고 있습니다.
특히 대형 화면 혹은 와이드 화면을 사용할 경우에 편리합니다.

이러한 가젯을 만들어서 판매를 하는 곳도 있지만, 프로그램을 했던 사람들은 간단히 만들어서 사용을 할수 있습니다.
아래는 운영체제에 기본으로 포함되어 있는 가젯들의 위치이며, 확인을 해보면 xml, html, css, javascript로 이루어져 있는 것을 확인할 수 있습니다.

다른 가젯 프로그램도 인터넷에서 다운을 받으면 확장자가 gadget 이지만, 실제적으로 zip으로 압축이 되어 있는 형태입니다.
그래서 확장자를 변경후에 압축을 풀어서 내부 내용을 참고해서 개발이 가능합니다.

개발에 대한 개념은 아래의 사이트를 한번만 읽어보면 쉽게 이해가 됩니다.

http://msdn.microsoft.com/ko-kr/magazine/cc163370.aspx

참고로 웹에서 다운로드 서비스를 제공하고자 한다면 .gadget에 대해서 아래와 같은 형식의 MIME을 제공해야만 윈도우 운영체제에서 인식이 됩니다.

application/x-windows-gadget

Apr 182012
 

예전부터 네트워크 프로그램을 많이 작성을 하면서 pcap 라이브러리를 이용해서 패킷캡쳐를 했었다.

http://luca.ntop.org/Ring.pdf

하지만 우연한 기회에 위의 논문에서 PF_RING이라는 방식으로 패킷을 캡쳐하면 패킷 캡쳐 효율이 보다 좋다는 것을 알게 되었다. 대부분 응용프로그램을 감시하는 프로그램에서는 기존의 방식으로도 충분하겠지만, 100M 이상의 네트워크를 처리하거나, 네트워크에서 모니터링을 목적으로 만든 장비에서는 중요한 항목이 될수 있으므로 관심을 가지게 되었다.
그래서 공개된 소스로 원리를 파악하고 기존의 프로그램을 업데이트의 필요성을 느끼게 되었다.

일단 아래의 사이트에서 PF_RING 커널 모듈을 따라서 설치하면 쉽게 설치를 할수 있다.

http://www.ntop.org/get-started/download/

kernel-devel 패키지가 설치가 되어 있는 경우라면 쉽게 컴파일을 해서 pf_ring.ko 파일 만들기가 되므로, insmod 명령어로 커널에 모듈로 올리면 된다.

[root@localhost PF_RING]# lsmod |grep pf_ring
pf_ring               365711  0

그리고 SVN 서버에서 usermode 프로그램 예제도 같이 들어가 있어서 소스도 확인을 할수 있고, 또한 샘플 프로그램도 확인이 가능하다. 그리고 pf_ring 을 사용하는 tcpdump 프로그램도 들어가 있는 것을 확인할 수 있다.

[root@localhost examples]# ./pcount
Capturing from eth0
=========================
Absolute Stats: [48 pkts rcvd][0 pkts dropped]
Total Pkts=48/Dropped=0.0 %
48 pkts [49.7 pkt/sec] - 2880 bytes [0.02 Mbit/sec]
=========================
=========================
Absolute Stats: [108 pkts rcvd][0 pkts dropped]
Total Pkts=108/Dropped=0.0 %
108 pkts [54.9 pkt/sec] - 6716 bytes [0.03 Mbit/sec]
=========================
Actual Stats: 108 pkts [1000.1 ms][107.98 pkt/sec]
=========================
=========================
Absolute Stats: [158 pkts rcvd][0 pkts dropped]
Total Pkts=158/Dropped=0.0 %
158 pkts [53.3 pkt/sec] - 10032 bytes [0.03 Mbit/sec]
=========================
Actual Stats: 50 pkts [1000.1 ms][50.00 pkt/sec]
=========================

소스를 확인해보면 기존의 라이브러리 대신에 소스에 포함되어 있는 pfring과 pcap 라이브러리를 사용해서 컴파일을 하면 된다.

[root@localhost userland]# ldd examples/pcount
        linux-vdso.so.1 =>  (0x00007fffaf179000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003664800000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003664000000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003663800000)
[root@localhost userland]# ls -al libpcap/libpcap.a
-rw-r--r-- 1 root root 401912 2012-04-18 18:19 libpcap/libpcap.a
[root@localhost userland]# ls -al lib/libpfring.a
-rw-r--r-- 1 root root 172836 2012-04-18 18:18 lib/libpfring.a

[root@localhost userland]# cd examples/
[root@localhost examples]# touch pcount.c
[root@localhost examples]# make
gcc  -O2 -Wall -I../../kernel -I../../kernel/plugins -I../lib -I../libpcap-1.1.1-ring  -D HAVE_ZERO -O2  -c pcount.c -o pcount.o
gcc  -O2 -Wall -I../../kernel -I../../kernel/plugins -I../lib -I../libpcap-1.1.1-ring  -D HAVE_ZERO -O2  pcount.o ../libpcap-1.1.1-ring/libpcap.a   ../lib/libpfring.a  -lpthread  -L../libpcap -lpcap   -o pcount
Apr 182012
 

Redhat의 RHEL4가 생산이 중단이 되었습니다. 즉 더이상 커널 패치 및 어플 패치를 제공하지 않는다는 것입니다.

https://access.redhat.com/support/policy/updates/errata/

같은 RPM을 사용하고 있는 CentOS4의 경우에는 같은 운명을 가지고 있습니다.
아래의 사이트에서 보면 http://vault.centos.org/4.9/ 에서 마지막 패키지를 제공하고 있습니다.

http://lists.centos.org/pipermail/centos-announce/2012-February/018462.html

하지만 아직도 여전히 많은 시스템들이 CentOS 4 기반으로 운영이 되고 있기 때문에 2012년 2월까지 만들어진 패키지를 이용해서 추가 설치를 할수 있어야 합니다. 하지만 기존의 설정을 그대로인 상태에서 패키지 관리자인 yum을 사용하게 되면 아래와 같은 에러로 사용을 할수가 없는 상황입니다.

[root@localhost ~]# yum list
Setting up repositories
not using ftp, http[s], or file for repos, skipping - 4 is not a valid release or hasnt been released yet
Cannot find a valid baseurl for repo: update
Error: Cannot find a valid baseurl for repo: update
[root@localhost ~]#

이런 경우에는 아래와 같이 /etc/yum.repos.d/CentOS-Base.repo 파일을 수정해서 사용하면 됩니다.
(참고: https://www.centos.org/modules/newbb/viewtopic.php?topic_id=36528&forum=27)

[localhost(root):/etc/yum.repos.d]# diff -Nu CentOS-Base.repo.120418 CentOS-Base.repo
--- CentOS-Base.repo.120418     2012-04-18 10:47:11.000000000 +0900
+++ CentOS-Base.repo    2012-04-18 10:50:12.000000000 +0900
@@ -13,8 +13,9 @@
 
 [base]
 name=CentOS-$releasever - Base
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
 #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
 priority=1
@@ -23,8 +24,9 @@
 #released updates
 [update]
 name=CentOS-$releasever - Updates
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
 #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
 priority=1
@@ -33,8 +35,9 @@
 #packages used/produced in the build but not released
 [addons]
 name=CentOS-$releasever - Addons
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
 #baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
 priority=1
@@ -43,8 +46,9 @@
 #additional packages that may be useful
 [extras]
 name=CentOS-$releasever - Extras
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
 #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
 priority=1
@@ -53,8 +57,9 @@
 #additional packages that extend functionality of existing packages
 [centosplus]
 name=CentOS-$releasever - Plus
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
 #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 enabled=0
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
@@ -64,8 +69,9 @@
 #contrib - packages by Centos Users
 [contrib]
 name=CentOS-$releasever - Contrib
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
 #baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 enabled=0
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
[localhost(root):/etc/yum.repos.d]#

저는 이렇게 해서 기존의 CentOS에서 jar 파일을 생성하기 위해서 java-1.4.2-gcj-compat-devel-1.4.2.0-27jpp 패키지를 yum으로 설치하여 jar 프로그램을 사용할 수 있었습니다.

Plugin from the creators of Brindes :: More at Plulz Wordpress Plugins