#!/usr/bin/perl
# Copyright (C) 2006 Slogical Corporation. All Rights Reserved.
use Socket;
use strict;
## ヘルプメッセージの表示
## ---------------------------------------
if ($ARGV[0] eq "-h") {
print STDERR "1st arg is HOSTNAME of httpd server (required).\n";
print STDERR "2nd arg is URI of request (default is '/')\n";
print STDERR "3rd arg is PORT_NO of httpd server (default is 80)\n";
exit(1);
}
## 引数のチェック
## ---------------------------------------
my $target_host = $ARGV[0];
if ($target_host eq "") {
print STDERR "1st arg must be HOSTNAME of httpd server.\n";
print STDERR "if you want to show help, run '" . $0 . " -h'\n";
exit(-1);
}
my @target_addr = unpack('C4', (gethostbyname($target_host))[4]);
if ($target_addr[0] !~ /^[0-9]+$/ || $target_addr[0] < 0 || $target_addr[0] > 256 ||
$target_addr[1] !~ /^[0-9]+$/ || $target_addr[1] < 0 || $target_addr[1] > 256 ||
$target_addr[2] !~ /^[0-9]+$/ || $target_addr[2] < 0 || $target_addr[2] > 256 ||
$target_addr[3] !~ /^[0-9]+$/ || $target_addr[3] < 0 || $target_addr[3] > 256) {
print STDERR "can not resolve ipaddress of httpd server.\n";
exit(-1);
}
my $target_addr = $target_addr[0] . "." . $target_addr[1] . "." . $target_addr[2] . "." . $target_addr[3];
my $target_uri = "/";
if ($ARGV[1] ne "") { $target_uri = $ARGV[1]; }
if ($target_uri !~ /^\//) {
print STDERR "URI of request must be started with '/'\n";
exit(-1);
}
my $target_port = "80";
if ($ARGV[2] ne "") { $target_port = $ARGV[2]; }
if ($target_port < 0 || $target_port > 65536) {
print STDERR "PORT_NO of httpd server is invalid\n";
exit(-1);
}
## httpのリクエスト・レスポンスを格納する変数
## ---------------------------------------
my $http_req;
my $http_res;
## httpリクエストの定義
## ---------------------------------------
$http_req = "GET " . $target_uri . " HTTP/1.0\r\n";
$http_req .= "Host: " . $target_host . "\r\n";
$http_req .= "\r\n";
## ソケットを作成して、コネクトする
## ---------------------------------------
socket(SOCK, PF_INET,SOCK_STREAM, getprotobyname('tcp')) || die();
select SOCK;
$| =1;
select STDOUT;
my $sockaddr = sockaddr_in($target_port, inet_aton($target_addr));
connect(SOCK,$sockaddr) || die();
## リクエスト送信
## ---------------------------------------
print SOCK $http_req;
## レスポンス受信
## ---------------------------------------
while () {
$http_res .= $_;
}
## ソケットを閉じる
## ---------------------------------------
close(SOCK);
## 取得したコンテンツを標準出力
## ---------------------------------------
print $http_res;
exit(0);
# Copyright (C) 2006 Slogical Corporation. All Rights Reserved.
use Socket;
use strict;
## ヘルプメッセージの表示
## ---------------------------------------
if ($ARGV[0] eq "-h") {
print STDERR "1st arg is HOSTNAME of httpd server (required).\n";
print STDERR "2nd arg is URI of request (default is '/')\n";
print STDERR "3rd arg is PORT_NO of httpd server (default is 80)\n";
exit(1);
}
## 引数のチェック
## ---------------------------------------
my $target_host = $ARGV[0];
if ($target_host eq "") {
print STDERR "1st arg must be HOSTNAME of httpd server.\n";
print STDERR "if you want to show help, run '" . $0 . " -h'\n";
exit(-1);
}
my @target_addr = unpack('C4', (gethostbyname($target_host))[4]);
if ($target_addr[0] !~ /^[0-9]+$/ || $target_addr[0] < 0 || $target_addr[0] > 256 ||
$target_addr[1] !~ /^[0-9]+$/ || $target_addr[1] < 0 || $target_addr[1] > 256 ||
$target_addr[2] !~ /^[0-9]+$/ || $target_addr[2] < 0 || $target_addr[2] > 256 ||
$target_addr[3] !~ /^[0-9]+$/ || $target_addr[3] < 0 || $target_addr[3] > 256) {
print STDERR "can not resolve ipaddress of httpd server.\n";
exit(-1);
}
my $target_addr = $target_addr[0] . "." . $target_addr[1] . "." . $target_addr[2] . "." . $target_addr[3];
my $target_uri = "/";
if ($ARGV[1] ne "") { $target_uri = $ARGV[1]; }
if ($target_uri !~ /^\//) {
print STDERR "URI of request must be started with '/'\n";
exit(-1);
}
my $target_port = "80";
if ($ARGV[2] ne "") { $target_port = $ARGV[2]; }
if ($target_port < 0 || $target_port > 65536) {
print STDERR "PORT_NO of httpd server is invalid\n";
exit(-1);
}
## httpのリクエスト・レスポンスを格納する変数
## ---------------------------------------
my $http_req;
my $http_res;
## httpリクエストの定義
## ---------------------------------------
$http_req = "GET " . $target_uri . " HTTP/1.0\r\n";
$http_req .= "Host: " . $target_host . "\r\n";
$http_req .= "\r\n";
## ソケットを作成して、コネクトする
## ---------------------------------------
socket(SOCK, PF_INET,SOCK_STREAM, getprotobyname('tcp')) || die();
select SOCK;
$| =1;
select STDOUT;
my $sockaddr = sockaddr_in($target_port, inet_aton($target_addr));
connect(SOCK,$sockaddr) || die();
## リクエスト送信
## ---------------------------------------
print SOCK $http_req;
## レスポンス受信
## ---------------------------------------
while (
$http_res .= $_;
}
## ソケットを閉じる
## ---------------------------------------
close(SOCK);
## 取得したコンテンツを標準出力
## ---------------------------------------
print $http_res;
exit(0);
'기타' 카테고리의 다른 글
| 야심한 밤에... (0) | 2008.04.08 |
|---|---|
| 떡뽁이 아줌마 울지 마세요 (0) | 2008.03.05 |
| kitri sd 55 (0) | 2007.08.19 |
| [스크랩] 조선시대, '욘사마' 능가하는 한류 있었다 (0) | 2007.07.23 |
| 에스겔 11장 (0) | 2007.07.08 |