[지저분한] 네이버 자동출첵 Perl script
글쓴이: acidd15 / 작성시간: 월, 2005/07/04 - 9:54오전
#!/usr/bin/perl use Socket; use POSIX; sub parseURL{ my $url=@_[0]; return $url=~m/(https?):\/\/([^\/]*)(.*)/; } #클럽아이디 $club_id=""; #날짜 세팅 $start_day=7; $start_mon=6; $start_year=2005; #메시지 $what_say="흠....-_-."; #id 에 아이디 #pw 에 패스워드 $n_id=""; $n_pw=""; $page_url="http://id.naver.com/nidlogin.login?id=".$n_id."&pw=".$n_pw; $view_url="http://cafe.naver.com/AttendanceView.nhn?clubid=".$club_id."&attendyear=".$start_year."&attendmonth=".sprintf("%02d",$start_mon)."&attendday=".sprintf("%02d",$start_day); $post_url="http://cafe.naver.com/AttendancePost.nhn?clubid=".$club_id."&attendyear=".$start_year."&attendmonth=".sprintf("%02d",$start_mon)."&attendday=".sprintf("%02d",$start_day)."&page=&emotion=11&content=".$what_say; print $page_url."\n"; print $view_url."\n"; print $post_url."\n"; ($protocol,$host,$uri)=parseURL($page_url); if($protocol eq "http"){ $port="80"; }elsif($protocol eq "https"){ $port="443"; }else{ print "Unknown protocol.\n"; exit 0; } $port = getservbyname ($port, 'tcp') unless $port =~ /^\d+$/; $dest_ip = gethostbyname ($host); $dest_serv_params = sockaddr_in($port, $dest_ip); socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!"; connect (S, $dest_serv_params) or die "connect: $!"; select (S); $| = 1; select (STDOUT); # Eliminate STDIO buffering $msg="GET ".$uri." HTTP/1.1\r\nConnection: Close\r\nHost: ".$host."\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n\r\n"; syswrite(S,$msg,length($msg)); $content=""; while(($len=sysread(S,$read_buffer,256)>0)){ $content.=$read_buffer; } close S; #print $content."\n"; @list=split(/\r\n/,$content); @cookie_arr=(); for $i(0..@list-1){ if($list[$i]=~/Set\-Cookie:\s*(.+)/g){ push(@cookie_arr,$1); } } $cookie_str="Cookie: ".join(" ",@cookie_arr)."\r\n"; print $cookie_str."\n"; $dest_date=scalar(mktime(0,0,0,$start_day,$start_mon-1,$start_year-1900)); print $dest_date." : ".localtime($dest_date)."\n"; $loop_triger=0; $count=0; while(!$loop_triger){ if($dest_date<=time or $count==60){ $count=0; print time."\n"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); printf "%4d-%02d-%02d %02d:%02d:%02d\n",$year+1900,$mon+1,$mday,$hour,$min,$sec; print $dest_date." : ".localtime($dest_date)."\n"; #글쓰기 페이지에 연결하여 textarea가 존재하는지 살핀다. ($protocol,$host,$uri)=parseURL($view_url); if($protocol eq "http"){ $port="80"; }elsif($protocol eq "https"){ $port="443"; }else{ print "Unknown protocol.\n"; exit 0; } $port = getservbyname ($port, 'tcp') unless $port =~ /^\d+$/; $dest_ip = gethostbyname ($host); $dest_serv_params = sockaddr_in($port, $dest_ip); socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!"; connect (S, $dest_serv_params) or die "connect: $!"; select (S); $| = 1; select (STDOUT); # Eliminate STDIO buffering $msg="GET ".$uri." HTTP/1.1\r\n".$cookie_str."Connection: Close\r\nHost: ".$host."\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n\r\n"; syswrite(S,$msg,length($msg)); $content=""; while(($len=sysread(S,$read_buffer,256)>0)){ $content.=$read_buffer; } close S; if($content=~/ui\('$n_id'/){ print "Already wroted.\n"; #exit 0; ++$start_day; $dest_date=scalar(mktime(0,0,0,$start_day,$start_mon-1,$start_year-1900)); $view_url="http://cafe.naver.com/AttendanceView.nhn?clubid=".$club_id."&attendyear=".$start_year."&attendmonth=".sprintf("%02d",$start_mon)."&attendday=".sprintf("%02d",$start_day); $post_url="http://cafe.naver.com/AttendancePost.nhn?clubid=".$club_id."&attendyear=".$start_year."&attendmonth=".sprintf("%02d",$start_mon)."&attendday=".sprintf("%02d",$start_day)."&page=&emotion=11&content=".$what_say; print $page_url."\n"; print $view_url."\n"; print $post_url."\n"; }else{ #존재 한다면 글을 쓰고 프로그램을 종료한다. if($content=~/<form name="attendanceFrm"/){ print "OK! I FOUND IT!!!\n"; $delay_time=int(rand(6))+2; print "DELAY: ".$delay_time."\n"; sleep($delay_time); ($protocol,$host,$uri)=parseURL($post_url); if($protocol eq "http"){ $port="80"; }elsif($protocol eq "https"){ $port="443"; }else{ print "Unknown protocol.\n"; exit 0; } $port = getservbyname ($port, 'tcp') unless $port =~ /^\d+$/; $dest_ip = gethostbyname ($host); $dest_serv_params = sockaddr_in($port, $dest_ip); socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!"; connect (S, $dest_serv_params) or die "connect: $!"; select (S); $| = 1; select (STDOUT); # Eliminate STDIO buffering $msg="GET ".$uri." HTTP/1.1\r\n".$cookie_str."Connection: Close\r\nHost: ".$host."\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n\r\n"; syswrite(S,$msg,length($msg)); $content=""; while(($len=sysread(S,$read_buffer,256)>0)){ $content.=$read_buffer; } close S; print $content; #exit 0; } } } sleep(1); ++$count; }
저번달에 제가 가입되었던 스터디 클럽에서 출첵 미션하길래 만들어 봤습니다.ㅋ..덕분에 출첵미션 성공해서 상품도 타고 했는데..--;;
급조돼서 좀 지저분 합니다..필요하신분들은 다듬어서 쓰십시요 ^^;
Forums:
자동출첵이 먼가요?
출첵?이 먼지 몰라서 ㅎㅎ
@.@
^^
^^..카페 출석부 입니다..ㅋ
perl은 모르겠구.. 그냥 쉘과 lynx로.. ^^
Re: perl은 모르겠구.. 그냥 쉘과 lynx로.. ^^
오호...물론 원하는 날짜에 출첵을 남길수는 있겠지만 남긴 시간이 맞지 않을수도 있을 것이기 때문에 약간은 아쉬운 스크립트 이군요. :lol:
왜냐? 현재보다 미래나 과거의 어느 특정날짜에 출첵을 할경우 시간은 현재시간으로 남겨지기때문에 출첵을 해도 신뢰성이 없겠죠.. 8)
댓글 달기