'Perl/잡다한 Perl 이야기'에 해당되는 글 17건

  1. 2012.10.24 [KPW2012] Notepad Letter (7)
  2. 2012.10.11 [KPW2012] Korean Perl Workshop 2012 - 초대합니다 :)
  3. 2011.03.18 [ Busan Secmem Hackathon ] Twitter followers에 대한 통계내기 (1)
  4. 2010.12.01 2010 Korea Perl Advent Calendar (2)
  5. 2010.09.13 Naver Perl 카페회원 1000명을 돌파! (10)
  6. 2010.07.30 드디어 "Perl 6"이 출시 되었습니다 :) (3)
  7. 2009.06.06 [Tool] Cava Packager (3)
  8. 2009.03.24 YASPS 발표자료
  9. 2009.02.19 Perl Study 카페 생성 (10)
  10. 2009.01.13 Perl로 짠 IRC Bot

Naver Perl Community & Study Cafe


2012.10.24 03:37

[KPW2012] Notepad Letter

2008년말 쯤에 한글 문자열을 자판에 입력되는 영문으로 바꾸는 방법  이라는 글을 쓴적이 있습니다.

당시에는 별 생각없이 기술연구 목적으로 테스트 용으로 만들었는데...

가끔 이 모듈을 이용해서 응용작품을 만들어 봐야 겠다는 생각을 하곤 했었죠.


최근에는 인문학이나, 감성, Design for humans 등등 

사람 중심의 문화가 많이 생기고 정착되고 있는 시기입니다.


이렇듯 소프트웨어를 통해 사람의 마음을 움직이는 프로그램이 필요하다고 느꼈고, 

향후에는 사람에게 메세지를 전달하는 정성을 넣어 감동으로 연결시키는

인간적인 프로그램이 앞으로는 크게 이슈가 될 것 같더라구요 ㅋㅋ


그런면에서 Notepad Letter은 그런 부분을 충족시켜주는 부분이 많았습니다.


4년만에 다시 열린 Korean Perl Workshop 2012 에서 발표할 기회가 생겨,

이 모듈을 다시 한번 연구해서 살을 붙여보자 하고 결심했습니다.


아래는 KPW2012 발표 자료입니다.

https://docs.google.com/file/d/0B3NurlLan8deZUJ4Yk1jVy1aM3c/edit?pli=1


Hangle.pm

package Hangle; use strict; use warnings; use Lingua::KO::Hangul::Util qw(:all); use base qw/Exporter/; use Encode qw/decode encode/; our @EXPORT_OK = qw/transformation/; sub transformation{ my $arg = shift; my $str = decode('cp-949', $arg); binmode STDOUT, ':encoding(cp-949)'; my %hangle = ( #초성 "\x{1100}" => 'r', "\x{1102}" => 's', "\x{1103}" => 'e', "\x{1105}" => 'f', # ㄱㄴㄷㄹ "\x{1106}" => 'a', "\x{1107}" => 'q', "\x{1109}" => 't', "\x{110B}" => 'd', # ㅁㅂㅅㅇ "\x{110C}" => 'w', "\x{110E}" => 'c', "\x{110F}" => 'z', "\x{1110}" => 'x', # ㅈㅊㅋㅌ "\x{1111}" => 'v', "\x{1112}" => 'g', "\x{1101}" => 'R', "\x{1104}" => 'E', # ㅍㅎㄲ ㄸ "\x{1108}" => 'Q', "\x{110A}" => 'T', "\x{110D}" => 'W', # ㅃ ㅆ ㅉ #중성 "\x{1161}" => 'k', "\x{1163}" => 'i', "\x{1165}" => 'j', "\x{1167}" => 'u', # ㅏㅑㅓㅕ "\x{1169}" => 'h', "\x{116D}" => 'y', "\x{116E}" => 'n', "\x{1172}" => 'b', # ㅗㅛㅜㅠ "\x{1173}" => 'm', "\x{1175}" => 'l', # ㅡㅣ "\x{1162}" => 'o', "\x{1164}" => 'O', "\x{1166}" => 'p', "\x{1168}" => 'P', # ㅐㅒㅔㅖ #종성 "\x{11A8}" => 'r', "\x{11AB}" => 's', "\x{11AE}" => 'e', "\x{11AF}" => 'f', # ㄱㄴㄷㄹ "\x{11B7}" => 'a', "\x{11B8}" => 'q', "\x{11BA}" => 't', "\x{11BC}" => 'd', # ㅁㅂㅅㅇ "\x{11BD}" => 'w', "\x{11BE}" => 'c', "\x{11BF}" => 'z', "\x{11C0}" => 'x', # ㅈㅊㅋㅌ "\x{11C1}" => 'v', "\x{11C2}" => 'g', # ㅍㅎ "\x{11A9}" => 'R', "\x{11BB}" => 'T', # ㄲ ㅆ #특수문자 "\x{20}" => ' ' , "\x{A}" => "\n" , "\x{2E}" => '.' , "\x{2C}" => ',' , #Space Enter . , "\x{2D}" => '-' , #Number "\x{30}" => '0' , "\x{31}" => '1' , "\x{32}" => '2' , "\x{33}" => '3' , "\x{34}" => '4' , "\x{35}" => '5' , "\x{36}" => '6' , "\x{37}" => '7' , "\x{38}" => '8' , "\x{39}" => '9' , ); my @jamos = map { split //, decomposeJamo($_) }split //, decomposeSyllable($str); my $keys = '{HAN}'; foreach (@jamos) { $keys .= $hangle{$_} } # print "$strokes"; return $keys; }



- 아래는 스크립트 입니다. 공개하니 부끄럽네요 ㅡ_ㅠ

use strict;
use warnings;    
use Win32::GuiTest qw(:ALL);
use Win32::MediaPlayer;
use Hangle qw/transformation/;

my $file = 'background.mp3';
my $winmm = new Win32::MediaPlayer;  
$winmm->load($file);        
$winmm->play;                   
$winmm->volume(100);            

# notepad 시작
system("start notepad.exe");
sleep 3;

#전체 창 띄우기 
max_window();

#한글 키 입력
Win32::GuiTest::SendKeys("{HAN}");

#글씨체 및 폰트 바꾸기
font_change("휴먼편지체",36);
sleep 3;

writing("너를 만나기 전까진.");
waiting();
waiting();
newLine();

writing("내 마음은 차가운 겨울처럼 멈춰있는 신호등과 같았어.");
waiting();
waiting();
newLine();

writing("하지만 너를 만나면서 무뚝뚝하던 내가");
newLine(); # Enter 한줄 내리기 
writing("조금씩 웃고 있다는 걸 깨달았지.");
sleep 4;

# 전체 지우기
clear();

writing("때론 설레임으로 잠을 못 이루기도 하고,");
sleep 2;
newLine(); # Enter 한줄 내리기 

writing("너의 웃음소리가 귓가에 맴돌아 나도 모르게 미소 짓고,");
sleep 2;
newLine(); # Enter 한줄 내리기 

writing("데이트하는 날이면, 시계만 종일 쳐다보는 나를 발견했어.");
waiting();
waiting();
newLine(); # Enter 한줄 내리기
newLine(); # Enter 한줄 내리기

writing("그래.");
waiting();
waiting();
waiting();
writing(" 나 지금 설래이고 떨려.");
waiting();
waiting();
sleep 4;

# 전체 지우기
clear();

writing("지금 네 앞의 남자는");
sleep 3;
newLine();
writing("아직 부족하고 모자라지만,");
sleep 3;
newLine();
newLine();

writing("너만을 사랑하고");
sleep 1;
writing(" 너만을 아껴주는");
sleep 1;
writing(" 멋진 남자가 될께.");
sleep 3;

newLine();
newLine();

writing("우리 앞으로 ");
sleep 1;
writing("행복 하게 지내자 ");
Win32::GuiTest::SendKeys("+6+6");
sleep 3;
newLine();
newLine();

writing("그리고.");
waiting();
waiting();
waiting();

writing(" 사");
waiting();
waiting();
waiting();
writing("랑");
sleep 1;

# 빨리 지우기 
backspace(12);


#천천히 지우기 
backspace(1);
sleep 1;
backspace(1);
sleep 1;
backspace(1);
sleep 1;

writing(" 사랑한다");
writing(" 누구누구야");
Win32::GuiTest::SendKeys("!!");
sleep 5;

#notepad 종료하기
end();

#음악 종료
$winmm->pause;

# 동영상 FullScreen으로 재생
system('"C:\Program Files (x86)\Windows Media Player\wmplayer.exe" C:\동영상.wmv /fullscreen');

# 폰트 변경하기
sub font_change {
  my ( $font,$size ) = (@_);
  my $cmd = "%of".transformation($font)."{TAB}{TAB}".$size;
  Win32::GuiTest::SendKeys($cmd);
  sleep 2;
  Win32::GuiTest::SendKeys("~");
  sleep 3;
}

# 최대창으로 변경 
sub max_window{
   Win32::GuiTest::SendKeys("%{SPACE}x");
   sleep 3;
}

# 한글 변환해서 출력 
sub writing{
  my $text = shift;
  Win32::GuiTest::SendKeys(transformation($text));
}

# . 찍으며 1초씩 기다리기
sub waiting{
  Win32::GuiTest::SendKeys(".");
  sleep 1;	
}

# Enter 한줄 내리기
sub newLine{
  Win32::GuiTest::SendKeys("~");  
}

# Ctrl+A 후 Backspace 키로 전체 지우기
sub clear{
  Win32::GuiTest::SendKeys("^a{BACKSPACE}");
}

# Backspace 사용
sub backspace{
   my ($count) = shift;
   Win32::GuiTest::SendKeys("{BACKSPACE}") for(1..$count) ;
}

#NotePad 종료
sub end{
  Win32::GuiTest::SendKeys("%{F4}{TAB}{ENTER}");
}

Link : http://codepad.org/uPhPvpSx



글을 쓸때 참고했던 URL 입니다 (http://whitelove002.tistory.com/290) 

작가님께 감사합니다 ^^;;



4년만에 함께한 Korean Perl workshop 아주 흥미로웠고 재밌었던 주제가 많았습니다.

특히 Web 분야가 상당히 많이 발전하고 있더군요.

배울점도 많고, 좋은 사람도 많이 만났습니다.


@Gypark 님을 드디어 뵙는 역사적인 날이기도 했구요 ㅋㅋ


좋은 행사를 준비해주신 관리자 분들께 감사드리구요!

11월 모임 때 뵙겠습니다^^/


http://event.perl.kr/kpw2012/


아래는 동영상입니다 ㅠ 흑엽님이 올려주셨는데.. 공개해도 될지..


신고
Trackback 2 Comment 7
2012.10.11 00:45

[KPW2012] Korean Perl Workshop 2012 - 초대합니다 :)

회사생활에 바쁘다보니 어느새 블로그를 쓴지도 꾀 오래 되었네요^^;

간만에 쓰는글인데 좋은 정보 알려드려야죠!! ㅋ


Korean Perl Workshop 2012 

KPW2012 가 10월 20일(토요일)에 서울에서 진행된다는 사실!


Perl 을 즐겨쓰고 좋아하는 사람들과

서로의 지식을 공유하는 자리로 

재밌게 했던 프로젝트와 알찬 정보 , 

그리고 최신 기술들을 워크샵에서 들을 수 있습니다!


으아~ 이런 엄청난 컨퍼런스를 꼭 가셔야죠! 

어서 이날 시간 비우시고 고고싱 합시다!!



Korean Perl 

Workshop 2012

on Sat. Oct. 20th, 2012 



크고 작은 세미나는 중간에 지속적으로 있었지만 

이런 큰 행사는 오랜만이라 긴장되고 기대 되네요!

등록은 아래 주소에서 하시면 됩니다.


아참!! 참가비 만원!

이정도야~ >_< 


많이많이 등록하고 참가해주세요~



 

신고
Trackback 1 Comment 0
2011.03.18 19:06

[ Busan Secmem Hackathon ] Twitter followers에 대한 통계내기


이번주 Secmem Hackathon 의 주제는 "Twitter" 였습니다.

이 주제를 통해 자유롭게 코드를 짜는 경합을 벌였고,

장소는 서면의 NOH'S ESPRESSO 커피샵에서 진행되었습니다.



저는 예전에 싸이월드 방명록에서

방명록을 쓴 사람들의 순위를 매겨주는 프로그램이 생각이 나서,

일정 기간동안 가장 많이 말을 한 사람들의 순위와

통계를 매겨주는 프로그램을 작성해보았습니다.


Net::Twitter::Lite 를 사용할때 작은 문제점이 있습니다.

이전에 @nan1004au 님이 한번 언급하셨는데

트위터 개발자 센터에서 키를 받아야 모듈이 사용 가능합니다.


그 문제를 해결하려면 여기 를 클릭하시면 해결 할 수 있습니다.

https://dev.twitter.com/ 에 가셔서 키를 받으시면 아래와 같이 생성이 됩니다.




코드는 아래와 같습니다.





1위에서 5위까지의 순위를 횟수와 퍼센트 별로 통계를 내어 트윗을 날려줍니다.




아래와 같이 순위별로 Google Chart 를 이용해서 순위별로 그래프도 출력해줍니다.



운영체제 환경은 윈도우7 이며,
콘솔창에서 실행되는 환경이라 인코딩 및 디코딩 함수를 사용하였습니다.
리눅스에서 실행하시는 분들은 따로 인코딩을 설정해주셔야합니다.


- 참고자료

Perl Module

- Net::Twitter::Lite
   http://search.cpan.org/~mmims/Net-Twitter-Lite-0.10003/lib/Net/Twitter/Lite.pm 
- URI::GoogleChart
   http://cpansearch.perl.org/src/GAAS/URI-GoogleChart-1.02/examples.html

Google Chart
http://code.google.com/intl/ko-KR/apis/chart/docs/gallery/pie_charts.html

twitter 
개발자 센터 : https://dev.twitter.com/

신고
Trackback 4 Comment 1
2010.12.01 20:10

2010 Korea Perl Advent Calendar




http://advent.perl.kr

Perl 커뮤니티에는 매년 크리스마스 4주 전부터 Advent Calendar라는 것을 만들어서 
유용한 팁이나 정보들을 크리스마스 때까지 하나씩 올리곤 합니다.

매년 해외에서만 했고 한국에서는 이루어지지 않다가 
드디어 이번 2010년에는 Advent Calendar 가 열렸습니다 :)

진행하시는 분의 순서는 아래와 같고, 
글을 쓰고 싶으신 분들은 아래에 댓글을 달아주시면 감사하겠습니다!


12/1 aer0
12/2 aquative
12/3 jakerorg
12/4 gypark
12/5 ainvyu
12/6 popeye92
12/7 sng2c
12/8 kiseok7
12/9 keedi
12/10 eeyees
12/11 y0ngbin
12/12 dalinaum
12/13 yykim
12/14 corund
12/15 honeyperl
12/16 am0c
12/17 luzluna
12/18 ascendo
12/19 yuni_kim
12/20 jeen_lee
12/21 darjeeling
12/22 vohrmana
12/23 purewish
12/24 hshong

좋은 내용들이 많습니다~ 꼭 읽어보세요!

신고
Trackback 1 Comment 2
2010.09.13 05:44

Naver Perl 카페회원 1000명을 돌파!




네이버에 운영중인 Perl Community & Study 카페 회원이

드디어 1000명을 넘어섰습니다.



Perl 카페는 세간의 이슈를 받지 않았고,

별 다른 홍보활동도 하지 않았습니다.

 

그럼에도 불구하고 프로그래밍 언어인 Perl 을 좋아하고

관심있는 회원이 1000명이나 모였다는 것은 너무 대단하고,

감동적인 일이라 생각합니다.

 

 

제가 처음에 이 카페를 만들었을 당시,

perl 을 열심히 배우고 있었고,

perl 을 너무나 좋아하던 시기 였습니다.

 

프로그래밍을 익히던 중 매너리즘에 빠졌던 당시,

광활한 세계를 느끼게 해주었고,

 

Perl 과 관련하여 많은 사람을 만나게 해주었던,

저에게는 너무나 소중했던 언어였습니다.

 

최근,카페장인 제가 공부하는 시기에서 일을 해야하는 시기로 넘어가

카페 관리에도 많이 소홀해 졌지만,

처음에 Perl 을 배울때 따스히 맞아줬던 분들을 기억하며,

언제든지 처음 배우시는 분이 있다면 저 또한 따스하게 맞아줘야 한다고 생각했습니다.

 
제가 적은 이 글을 부끄럽지 않도록 이제라도 많이 신경을 쓰겠습니다~~ ^^;

 

Perl 카페를 지켜보고 있고 들어와 주시는 회원 여러분들께 감사드리며

앞으로 Perl 카페의 행보에 대해서도 많은 기대 부탁드립니다.

 


기쁜 소식을 한가지 전해드리자면,

Perl 계의 정신적 지주이신 @keedi 님과 @y0ngbin 님이 두분이서 Perl 로 운영되는

회사를 개업하셨다고 합니다 :)

 

앞으로 많은 발전하셔서, 우리 카페에서 회원들 많이 뽑아가셨으면 하는 바램입니다 >_<

신고
Trackback 0 Comment 10
2010.07.30 02:16

드디어 "Perl 6"이 출시 되었습니다 :)


Perl 6이 Rakudo Star 라는 이름으로 릴리즈 되었습니다.

Rakudo Star - a useful, usable, "early adopter" distribution of Perl 6

http://rakudo.org/node/75

여기서 early adopters 라는 이름을 달고 출시를 한 이유는

perl 6 출시에 앞서 몇가지 버그가 있음을 잘 알고

사용자와 피드백을 얻기 위해서 이렇게 이름을 달았다고 합니다.



Perl 6 에서의 멋진 기능들 입니다 :)

  • Perl 6 grammars and regexes
  • formal parameter lists and signatures
  • metaoperators
  • gradual typing
  • a powerful object model, including roles and classes
  • lazy list evaluation
  • multiple dispatch
  • smart matching
  • junctions and autothreading
  • operator overloading (limited forms for now)
  • introspection
  • currying
  • a rich library of builtin operators, functions, and types
  • an interactive read-evaluation-print loop
  • Unicode at the codepoint level
  • resumable exceptions


KLDP 에 올리신 @aer0 님의 축하글 ~



Perl6을 사용하고 싶으시다면 아래 링크로 고고!!


Rakudo Star "perl 6" 다운로드 경로입니다.

신고
Trackback 2 Comment 3
2009.06.06 16:41

[Tool] Cava Packager





이번에 소개할 Tool은 Cava Packager 입니다.

예전에 perl mania 에서 소개(먼저 읽어보시면 좋습니다) 가 되었었는데

최근에 사용하게 되어, 탐구활동을 해봤습니다.




Cava Packager에 가면 프로그램에 대한 설명을 볼 수 있습니다.

처음 메인페이지에 있는 소개글을 간단하게 정리해볼께요~





Cava Packager


Cava Packager 는 어플을 개발하는데 있어

파일을 하나로 묶지 않는 방식으로  (non archiving packaging)

perl 5.8 또는 5.10 버전 윈도우 플랫폼 에서 제공 됩니다.

perl 스크립트 의 실행파일을 배포할 수 있도록 해주며,

ActivePerl and Strawberry Perl 에서는 테스트가 끝난 상태 라는 군요 :)

Dependency Scanning

Cava Packager는 자신이 작성한 Perl 스크립트 모듈들을 검사한 뒤에 

필요한 모듈들을 모두 포함 시켜줍니다.

Cava Package가 Perl 컴파일러로 오해하시는 분들이 간혹 있는데, 절때 아닙니다.

( Perl 컴파일러를 이야기하자면 오히려 PAR::Packer 쪽이 더 가깝지 않을까... 생각이 드는군요)

이러한 형식은 우리가 직접 작업을 해도 되는 부분인데

Perl 실행파일과 필요한 모듈만 빼내서 다른곳에 넣어주는것과 동일 하다는 거죠.


직접적으로 필요한 모듈만 빼는건 엄청난 노가다가 될 수 있는데,

그 모든것을 이 Cava Package가 알아서 해줍니다 :)


Pluggable Module Rules

어떤 모듈들은 단지 코드를 스캔해서 결정할 수 있는 것 보다 

더 많은 추가적인 의존성을 필요로 합니다. 

Cava Packager 는 의존된 모든 모듈들을 보장할 수 있는 방법도  제공되는군요.

같은 규칙을 모든 프로젝트에 적용할 수도 있군요~


Fast Application Start-Up


Cava Packager는 라이브러리들을 압축하지 않기에 프로그램을 빠르게 시작할 수 있습니다.

자신이 원한다면 압축을 할 수도 있습니다.


Flexible Packaging Method

의존적으로 함께 배치된 기본적인 Perl @INC 디렉토리 구조의 모듈들은 쉽게 작동되지 않습니다.

Cava Packager는 패키지의 일부 또는 프로그램에서 

모듈의 범위를 넓게 사용 할 수 있도록 필요한 방법을 제공하고 있습니다.


Included Help Files

프로그램에 도움말도 들어가는군요 !


Easy Resource Packaging

Cava Packager 는 스크립트에 필요한 resource 와 

데이터 파일을 포함할 수 있도록 간단한 방법을 제공합니다.



Multiple Executables

Cava Packager 는 같은 패키지에 여러개의 실행 파일을 만들 수 있습니다. 

이러한 실행 파일은 묶여진 모듈들, 스크립트 그리고 resources 들을 공유 할 수 있습니다.


No Dependency on Installed Perl

Cava Packager 는 자체적으로 perl이 설치되어 있지 않더라도 잘 돌아갑디다.

기본적으로 perl을 인스톨 할 수도 있더군요 

버전은 옛날 버전이긴 하지만 ^^;


Source Hiding

Cava Packager는 소스코드를 숨기는 것이 가능합니다.

선택 사항에 따라, 모듈의 소스 코드를 암호화 할 수 있습니다.

실행할 때는 그들의 소스 필터로 해독하여 사용합니다.

물론, 소스코드를 100% 보호할 수 있다고 가정할 수 없습니다.

이것은 어떤 어플도 가능하지 않겠지요 ㅋㅋ


Supports GUI and Console Applications


프로그램들은 윈도우 또는 콘솔 실행파일로 묶여 질 수 있습니다. 


Supported Platforms

윈도우 2000/XP/vista 에서 지원이 되는군요

다른 운영체제는 없습니다~ ㅡ.ㅠ





날림 번역이라 이해해 주시길,,




스샷!!




그리고 사용법에대한 설명을


cava 메인 페이지에서 찾다가 없어서 헤매고 있었는데


Help 에 보면 자세하게 잘 나와있더군요 털썩...




저 같은 경우에는 gtk2+로 만든 소스를 exe로 만들어 봤는데....


다른 곳으로 가지고 가도 실행이 안되더군요 ;ㅁ;


그래서 gtk2+에 관한 dll을 좀 추가시켰더니 되기는 하던데 아직 많이 불안합니다.



cava package는 wxWidgets 만 호환해주고 gtk2+는 왜 이리도 힘들게 만들어 놨단 말인가!!


업데이트 되었으면 하네요~

신고
Trackback 0 Comment 3
2009.03.24 10:47

YASPS 발표자료






이번 일요일에 열렸던 YASPS 발표자료입니다.



자료 중 틀린곳을 수정하여 올렸습니다.

처음 perl을 배우시는 분들

그리고 perl을 쓰시는데 평소에 궁금하던 것에대한 의문을

이 자료에서 풀어가시길!


신고
Trackback 1 Comment 0
2009.02.19 13:40

Perl Study 카페 생성






Perl Community & Study 2월 17일에 문을 열었습니다.

일단 개인적으로 시작한 카페지만 

많은 사람들이 오셔서 서로의 생각과 지식을 공유 했으면 합니다.



윈도우에서도 perl을 사용할 수 있는 환경구축 및

초보자도 쉽게 perl을 익힐 수 있는 재밌는 문제를 마련하여

많은 사람들에게 perl을 소개할 계획입니다.



네이버카페 에서 처음으로 Perl만 다루는 카페이며,

공부를 보다 즐겁고 재밌게 하기 위한 문화공간을 형성함으로써

서로 인맥도 쌓고 즐길 수 있는 공간이 되었으면 합니다^^



사실 이 카페 이전에 기존의 커뮤니티가 몇개 있었지만

다가서기가 조금 어려웠던 것이 사실이다.


그래서 이참에 네이버 카페에서 펄 커뮤니티 & 스터디라는 카페명으로 둥지를 틀었다.


카페를 만들고 네이버 카페에서는 perl만을 위한 최초의 카페라는것을 알게 되었고

이점을 이용하여 사람들을 많이 유치하려고 한다.



카페가 생긴지 이제 이틀정도 지났는데

perl을 배우고자 하는사람의 꾀 있었다는 사실을 알게 되었고

많은 이들에게 도움이 되는 카페를 만드려니 어깨가 조금 무거워진다 ㅡ.ㅠ


일단 JEEN님을 운영자로 임명해야겠...



http://cafe.naver.com/perlstudy 

많이 사랑해 주세요^^





신고
Trackback 2 Comment 10
2009.01.13 12:43

Perl로 짠 IRC Bot

예전 악성코드 분석을 한창 할 때 IRC 봇을 보고 난 뒤... 

언젠가 한번 만들어 봐야지... 생각했던 때가 있었다.



전에 C언어로 구현하려다 귀찮아서 손 놓고 있다가

Perl을 시작하자 말자 IRC BOT을 다루는 JEEN님을 만나 내공 습득!

즐겁게 Bot을 만들며 Perl공부를 했었다.


irc.freenode.org 의 #Perl-kr 방에는 여러 봇들이 각각의 몫을 하고 있으며,

대표적인 것으로 hanirc.org 의 #perl 방과 연결을 시켜 주는 것과

코드패드 생성, 영어사전 , IRC 로그를 확인하는 명령들이 있다.

cpan에 IRC 모듈을 검색해 보면 대부분 POE::Component::IRC 모듈만 나온다.


POE::Component::IRC

a fully event-driven IRC client module. 
POE-Component-IRC-5.88***** (3 Reviews) - 28 Aug 2008 - Chris Williams


2008년 8월 28일까지 꾸준히 업데이트가 되었으며 다양한 플러그인 기능들이 있어 

많은 사람들에게 사랑받는 모듈이다.


예전에 블로그로 뒤지다가 로우소켓프로그래밍으로 IRC봇을 짠 것을 봤는데...

그 코드가 C로 짠것만 못하다는 느낌이 들었다.


요즘들어 프로그래밍 언어란 그 언어의 특색에 맞게 코드를 짜야 하며

특히 Perl은 아주아주 Perl스럽게 코드를 짜야한다는 생각이 든다. ( saillinux 님께 세뇌를 받았...)

이 모듈을 정리한 블로그가 있으니  바로 여기!! 


JEEN님의 IRC BOT 만들기

조금만 응용을 시키면 FTP서버에서 프로그램을 다운받아서 

실행까지 시켜주는 프로그램을 만들 수 있다. (이 부분이 악성코드 실행과 거의 동일...)


생각없이 적었는데 만들어 보고 싶어져서... 한번.. 샤샤샥...

Net::FTP 모듈을 사용하여 코드 작성.

if ($what =~ /^!([a-z]+)\s?(.*?)?$/ ){
     my ($command,$option) = ($1,$2);
     if ($command eq 'ftp'){
	   my ($IP,$file) = split /\s+/, $option;			
	   $irc->yield( privmsg => $channel => "IP :".$IP. " 파일명 : ".$file );
	   my $ftp = Net::FTP->new($IP); #객체생성
	   $ftp->login("anonymous","");  #id와 비밀번호 설정
	   $ftp->cwd("/");  #FTP 서버의 경로 설정
	   $irc->yield( privmsg => $channel => $nick . " 접속성공! " );
	   $ftp->get($file);  #파일 다운로드
	   $ftp->quit;  #종료
	   #다운받은 파일 출력
	   if($file=~ m!.+\.txt!) {#다운받은 파일이 .txt 파일일때 출력 
	   open my $fh ,'<',$file or die "Can not download file : $! ";
	   while(<FH>){
	       next if($_ eq "\n");			
               $irc->yield( privmsg => $channel => $_);
           }
      }else{
	   $irc->yield( privmsg => $channel => cwd().$file." 에 파일이 저장되었습니다");		
      }
   }		
}



코드에 주석을 달아놨으니 간략히 설명하자면,

다운받은 파일이 텍스트 파일일때는 해당 파일을 출력해주고

아닐 경우에는 실행을 시켜준다. (실행하는 소스는 일부로 뺐다.)

간단히 테스트.

honey-bot은 직접 작성한 IRC 봇이고

명령을 내리면 ftp서버에 접속하여 파일을 다운받는다.



이제.. 이것을 exe파일로 만들어서... 유포를... ㅡ_ㅡ;;


관심있으신 분은 Perl Bot 만들기 프로젝트 홍보...!!    <-- 나도 일단 멤버라능... 


- PR
※ 현재 POE::Component::IRC를 사용한 Perl Bot 만들기 프로젝트가 진행중입니다.
http://code.google.com/p/perl-irc-bot

 참여를 원하시면 댓글을 달아주시거나, email: aiatejin@gmail.com
 혹은 IRC(irc.hanirc.org, #perl)에서 JEEN에게 연락하시면 됩니다.



예전에 작성했던 글을 테스트하다가 갱신해 버렸네 -_-;;
신고
Trackback 1 Comment 0