KT 메가패스의 인증 자동화
집에서 사용하는 ISP가 KT 메가패스인데, 언제부터인가 일정 시간이 지나면 모든 HTTP 접속을 차단하고 자기네 인증 페이지로 넘겨버린다. 거기서 인증을 하면 그 뒤로는 다시 아무 문제 없이 HTTP 사용이 가능하다. 문제는 내가 웹 브라우저가 아닌 것으로도 HTTP를 사용하기 때문에—예를 들면 MSN이나, 내가 직접 작성한 스크립트들—그런 것들은 얼핏 보기에 불가사의하게 오작동을 하는 것처럼 보여서 한참 헤매기 십상이라는 점이다. 그래서 간단하게 자동으로 인증하는 스크립트를 만들었다.
#!/usr/bin/env perl
use WWW::Mechanize;
my $mech = new WWW::Mechanize;
$mech->get('http://daum.net/');
exit unless $mech->content() =~ /Please wait while you are redirected/i;
$mech->content() =~ /\d+;\s*url=(https?:\/\/[^"]+)/i;
$mech->get($1);
$mech->submit_form(
form_number => 2,
fields => {
userID => '<YOUR ID GOES HERE>',
userPW => '<YOUR PASSWORD GOES HERE>'
}
);
WWW::Mechanize 모듈을 사용하면 이런 종류의 문제는 매우 쉽게 해결된다. 이런 스크립트를 만든 후, cron을 이용해 주기적으로 실행하게 했다.
# m h dom mon dow command
*/20 * * * * /Users/dahlia/bin/auth-megapass.pl
@reboot /Users/dahlia/bin/auth-megapass.pl
20분 주기로 실행한다고 해도, 내가 당장 컴퓨터를 깨웠을 때는 인증이 바로 되지 않는다. 나는 Mac을 사용하는데, 컴퓨터를 거의 끄지 않는 대신 잠자기(sleep)를 주로 사용한다. 하지만 잠자기에서 깼을 때는 crontab의 @reboot에 걸린 스크립트가 실행되지 않는다(cron 데몬이 다시 켜지거나 하는 것도 아니기 때문일 것이다). 잠자기에서 깨어났을 때의 이벤트를 잡는 방법을 두 시간 이상 검색해봤는데, 몇 가지 나온 방법(AppleScript에서 pmgtwake 이벤트 사용하기 등) 모두 제대로 동작하지 않는다. PowerPC Mac에서만 되는 것 같기도 하다.

December 11th, 2008 at 3:58 AM
저도 궁금해서 한 번 검색해 봤는데, launchd도 sleep/wake 콜백을 지원하지는 않는군요. 코코아 notification을 사용하는 방법 밖에는 없어보입니다. http://developer.apple.com/qa/qa2004/qa1340.html
December 11th, 2008 at 8:42 AM
그런 방법이 있었군요. 감사합니다! 오랜만에 Cocoa 프로그래밍을 해봐야겠네요.
December 11th, 2008 at 4:04 PM
저거 KT 신인증으로 생긴 겁니다.
저거 원래 한번만 하면 인증이 되는데요…
접속하는 맥(Mac Address)가 변경되면 나오더라고요.
그래서 저의 맥북 맥을 공유기에다가 물려서 인증 때려놓으니까 안나옵니다.