use Socket;について熱く語るスレ

このエントリーをはてなブックマークに追加
1use Socket;
Perlの醍醐味であるSocketについて語ろうぜ

※質問は専用スレへ。CGI串ってどこ?といった類もお断り
2nobodyさん:02/03/10 01:50 ID:???
3nobodyさん:02/03/10 01:58 ID:WvppN2j7
今だ!3ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
4nobodyさん:02/03/10 02:03 ID:???
4げと
5nobodyさん:02/03/10 02:08 ID:???
5げとおおおおおおおおおおおおおおおお
6use Socket;:02/03/10 02:26 ID:Q1gcj2Im
といってもネタがないので一つソースでも乗っけてみるか

#!/usr/local/bin/perl
use IO::Socket;use LWP::Simple;
while(1){$n=IO::Socket::INET->new(LocalPort=>80,Listen=>10)->accept();
print$n get((split/ /,<$n>)[1]);$n->close();}

ほれ、君たちの大好きなProxyじゃ。ただしGETのみ
7nobodyさん:02/03/10 02:31 ID:???
君たちの大好きな?ということはここは厨房が対象の
スレなんですね。失礼させて頂きます。
8nobodyさん:02/03/10 02:33 ID:???
$1 = head("Agent: NTTDoKyuMo/427/31\n");
9use Socket;:02/03/10 02:33 ID:???
>>7
ここは別に厨対象じゃねーぞ。
3とかのアホ向け(藁
10nobodyさん:02/03/10 02:40 ID:???
>>6さん

初心者なのでちょっとわからないのですが、#!/usr/local/bin/perl〜
で続く行がホスト名なのでしょうか?IEだと文字数オーバーしてしまい、
入らないのですが・・・。あとポート番号はデフォルトの8080でしょうか?
11nobodyさん:02/03/10 02:41 ID:???
>>10
あんた何?
12nobodyさん:02/03/10 02:42 ID:???
ちゃんとネタで返してやれよ

つーかこんな時間なのに人いるね
13nobodyさん:02/03/10 02:45 ID:???
居るときは居る。
14nobodyさん:02/03/10 02:51 ID:???
>>10
それはホスト名ではなくProxyのプログラム自体だ。
たとえばこれをprx.plという名前で保存してUNIXやActivePerlの
導入された環境下においてコマンドプロンプトから
A:\>Perl prx.pl
ちなみにこの場合Proxyのホスト名は君が診断君などのページへ逝ったとき
REMOTE_HOSTとして表示されている変数に入っている。ポート番号は80だ。
わかったかな、>>10
15nobodyさん:02/03/10 02:54 ID:???
うちのケーブル回線で56Kbps回線をシミュレートする必要が
あったから回線遅くするためのプロクシスクリプトは書いたな。
まあソケットから読み込むバッファサイズとスリープする秒数を
調整してselect挟むだけだけど。

普通のプロクシスクリプトも作ったけど、ただ単にHTTP1.0で
GET、POSTのみなら簡単なんだけど、HTTP1.1サポートするのが鬼の
ように面倒だったからやめたよ。httpsもあるし。使用用途はリクエストと
レスポンス(ヘッダだけじゃなく内容も)を全て記録したかったのと、
HTMLのフィルタリング、あとはハニーポットに使ったぐらいかな。

漏れはuse Socketだけでガリガリ書いてたから面倒に感じただけで、
他のモジュール使えば簡単にできんのかな。
16nobodyさん:02/03/10 02:55 ID:???
ネタに(略
17use Socket;:02/03/10 02:59 ID:???
>あったから回線遅くするためのプロクシスクリプトは書いたな。
贅沢な悩みだな。しかしuse Socketだけで書くとは漢だな。
私も以前はuse Socketで最初から書いていたがだんだんConnectとListen
が定型文なのでサブルーチン化しちゃったのでuse IO::Socketと
変わらなくなったのでさっさと乗り換えた。

>HTMLのフィルタリング、あとはハニーポットに使ったぐらいかな。
なんかアホが引っかかったか?(藁
18use Socket;:02/03/10 03:01 ID:???
どうでもいいけどHTTP 1.1でもっとも面倒なのはやっぱKeep-Aliveかの。
接続をcloseせずにwhileでループしてクリアしてるCGIを見たことあるけど
どうなのかな
19nobodyさん:02/03/10 03:01 ID:???
>>17
アホ引っ掛けるためじゃなく、CodeRedI〜III騒ぎの時だよ。

ちなみにHTMLのフィルタリングは一度全部バッファに読み込んで
からじゃないとHTMLいじれないんで、遅いからやめた。forkしないと
遅すぎ。
20use Socket;:02/03/10 03:08 ID:???
>>17
あーなるほど。うちはファイアーウォールで中国鯖をカットしてたけど
それでもいくらかアタックがきたかな。アパッチなので無意味だけど(藁

最近はSELECT使うようになったけど、やっぱProxyにはfork使うべきじゃないかな
鯖系スクリプト一般に思うんだけど、プロセス数を少なくしようとしてSELECT
使うのはわかるけど、別スレッドに任せておいたほうがプログラム的に
すっきりするし、何より軽い感じがする。
21nobodyさん:02/03/10 03:21 ID:???
>>20
forkはDoSを招きかねない
って塩兄ちゃんが昨日の日記に書いてた気がする。

いや、そんだけ。
22nobodyさん:02/03/10 03:23 ID:???
あとは…Linux上で使うFlashGetもどきのスクリプトも書いたな。
リストファイル読み込んで任意の数に分割して平行でダウソ
する奴。リジューム付き。でももっと高機能な奴を発見した時点で
開発やめちゃったよ。CGIばっか仕事で作らされるとつまらなくなって
来るから、仕事してるフリをするために書いてたようなもんだし。

ところでPerlでRAWソケットって扱ったこと無いんだけど、なんか
楽ができるモジュールないのかな。さすがにガリガリ書くのは面倒。
まあ素直にCで書けって言われそうだけど。
23use Socket;:02/03/10 03:35 ID:???
RAWソケットはSYN Floodを撃つなんていう厨房なプログラムしか
作ったことないのであまり大きな顔できんが・・・

http://9mm.com/philez/lego
とりあえずこの人のを参考に作ったよ
どっちかっていうとPerlの知識って言うよりIPの知識が必要だった。
24use Socket;:02/03/10 03:38 ID:???
UNIX使いじゃないので私はよくわからないのだが、
PerlのRAWソケットもやっぱりRootじゃないと使えないのだろうか。
Cでは使えなかったような気がする。

あーなんかRAWソケットというとステルスポートスキャナとかSYN Floodとか
厨なものしか作ってない。鬱
生ソケット使って実用的なものって作れるんかいな?
25nobodyさん:02/03/10 03:40 ID:???
>>23
お、貴重なサンプルスクリプトをありがとう。
でもやっぱりガリガリ書くのか(w

ちょっとARPを弄りたいんで色々やってみるよ。
まあ仕事のフリをしながら書くんだけどね
26nobodyさん:02/03/10 13:52 ID:???
>>20
selectよりforkが軽いというのは錯覚では?

27nobodyさん:02/03/10 13:59 ID:???
>>24
Socket自体をrootでないと使えないということはない。
一般ユーザーに制限がかかるのはbindできるportナンバー。
28nobodyさん:02/03/11 09:25 ID:???
>>27
いや、RAWの話でしょ。普通はスーパーユーザー
じゃないと使えないと思うけど。
29nobodyさん:02/03/11 12:03 ID:???
>>22
Net::RawIPはどうか。サンプルスクリプトもいくつか付いてるし。
一部の人が喜びそうなlandとかoshareのサンプルもあり(w

関係ないけどNet::Pcapも楽ができる
30use Socket;:02/03/11 19:29 ID:???
>>26
いや、サーバー側じゃなくてクライアント側がね。
確かにサーバー側は重いかもしれんが所詮Perl串なんて不特定多数に
公開するものでもないのでforkを私はお勧めする。

>>22
名前からして便利そうな感じだがとりあえずオフィシャルサイト覗いてみると落ちてた(汗
とりあえず情報サンクス
http://quake.skif.net/RawIP/
31nobodyさん:02/03/11 19:48 ID:lmK+A0LG
ひさびさの有意義スレあげ
32use Socket;:02/03/11 20:50 ID:???
>Net::RawIP
oshareパケット、LAN内のWin98に向けてで実行してみたらまじでクラッシュしたよ(汗
98SEなら大丈夫なのかな?

それよりもtracerouteを生パケットレベルからやってるとこには感動
open( TR,"/usr/bin/traceroute $host" );
print while <TR>;
close( TR );
これだけで済むといえば済むのだが自分で1から作ってみるのも結構面白い。
なんかRAW SOCKETにはまりそうだ。
33nobodyさん:02/03/11 21:57 ID:m0K7iM7P
以前はモジュール使わずにsocketで直接作ってたけど、最近は堕落してIO::Socketばっかだ。
>>18 コマンドパイプライニングが面倒。Keep-Alive許されるか否かがやってみないと判らないとい
うのは実装考えてつくった規格とは思えない。
34nobodyさん:02/03/11 22:04 ID:???
関係ないけどNet::Tracerouteってのもあるよ
35nobodyさん:02/03/11 22:06 ID:???
use Socket6はどうよ。 …どうもこうも無いけど
36nobodyさん:02/03/11 22:09 ID:Nq6ZCTrF
毒デムパが使える。
37use Socket;:02/03/12 00:43 ID:???
IO::Socketを使うと堕落した感じがするのはなぜだろう。
・・・単に労力の差か。

>>33
リクエストのパイプライン化は確かに面倒だが、Keep-Aliveが実現できているサーバーなら、
リソースを取得してクライアントへの送信のみを行う子プロセスをつくって
親プロセスはリクエストを受け取り専門になって子プロセスにどんどん指示を出していき、
タスクリストを追加していく、という方法で逝けないかな。
ただその場合子プロセスのリソース取得方法もKeep-Aliveをサポートしないと逝けない
と考えると多少鬱になる。これぐらいはHTTP1.0で許してもらおう(笑
38use Socket;:02/03/12 18:53 ID:???
なんかスレも下がってきてマターリ語れるのはよいが
さびしくなってきたな(藁
39nobodyさん:02/03/12 19:08 ID:???
>>24
うぃraw_socketはrootじゃないと起こられる。Win32は関係ないけど。

raw_socket周りで面白かったのはicmp-echoとreplyでファイル転送ツールを作った時。
pingが通ればファイル転送可能!
でも激オソ。バグ多数(涙)
40use Socket;:02/03/12 19:38 ID:???
>>39
pingでファイル転送デスカ・・・。おつかれさん。
私はUDPファイル転送なんて作ったことあるけど分割パケットを受信側で組み立てる
作業が難しかったね。LAN内では別にエラー訂正なんて要らないほど正確だったけど
インターネットに持ち出すとパケットの死ぬこと死ぬこと(藁
41use Socket;:02/03/12 19:40 ID:YB/JsQLE
たまにはageてみませう
42nobodyさん:02/03/12 21:47 ID:???
>>39
そのツールいい、面白そうだ。俺も今度暇つぶしに作ろっと。
役に立たないけど(w
43nobodyさん:02/03/12 23:08 ID:???
raw socketでIPMessengerを… (以下自粛)

>>33
Keep-Aliveなサーバでも勝手に切ってくる時もあったり…
44nobodyさん:02/03/13 00:19 ID:???
PerlDuke下さい
45nobodyさん:02/03/13 00:22 ID:???
>>44
#!/usr/local/bin/perl
while(1){if(fork()==0){while(1){print "氏ね\n";}}}

ほれ
46nobodyさん:02/03/13 03:21 ID:???
google なんかを利用する
スクリプトを書くにはどうしたらいいんですか?
47nobodyさん:02/03/13 09:56 ID:???
#!perl
use Google;
$g = new Google(lang => 'ja');
$rh = $g->request('ほげ!');
while($r = $rh->fetch){
print "URI:", $r->uri, "\n";
}
__END__
…とかな(うそ

まぁお前、>>46はLWPでも調べなさいってこった。
48nobodyさん:02/03/13 13:38 ID:???
>>47の仕様書にあわせてGoogle.pmを作ってみた。
暇だなぁ。
http://gikotk.tripod.co.jp/dust/Google.pm
use IO::Socketしてるのはやはりヘタレか?
4946:02/03/13 17:03 ID:???
言ってみるもんだなぁ。サンクス!
50use Socket;:02/03/13 17:45 ID:???
>>48
お、あんたギコTkの作者かい。PerlでGUIとは熱いね。
5147:02/03/13 17:59 ID:???
>>48
ワラタ
折角だから遊ばせてもらおう。
5247:02/03/13 19:06 ID:???
ん〜む。思うように動かんなぁ。
ちょっと修正したけどけっこう途切れたり関連サイトのURIが取れなかったりする。
それにしてもGoogleのソースって読みづらいなぁ…。
5348:02/03/13 20:01 ID:???
>>50
おう、別スレで頑張っておりますー。無駄に熱いぞ。
>>47
ほんとにうまく動かんねぇ、スマヌ。
いちお、こんなのもあるみたいだけど。(使ってないからよくわからん)
http://search.cpan.org/search?dist=WWW-Search-Google
5448:02/03/13 20:22 ID:???
とりあえず修正・・・・
一応関連サイトが取れてごみも混ざらないように見えるがよくわからん。
HTTPとして間違ったヘッダを送ってるのは秘密だ。
55nobodyさん:02/03/26 00:11 ID:AmQVaL8y
616765a
56use Socket;:02/03/26 02:41 ID:???
放置してたのにあがってるよ(藁)
ところでSocketとあまり関係無いけど、CGI串作るとき、
みんなURLの分解はどうしてるのかな?

$url = "http://pc.2ch.net/php/index.htm";
$dir = $url;
$dir =~ s!http://!!;
( $host, $port ) = split( /\//, $dir );
$dir =~ s/$host//;

こんな風にしてるんだけど正規表現だけでできそうな気が。
57nobodyさん:02/03/26 11:44 ID:???
my ($host, $port, $file) = ($uri =~ m!http://([^:/]+)(?::(\d+)?(.+)!);

$portにundefだか0だかが入るのを気にしなければ1行。
58nobodyさん:02/03/26 17:40 ID:???
じゃあ気にする時は $port ||= 80; とか追加すればいいのね
59use Socket;:02/03/26 18:17 ID:???
>>57
さんきゅー
ていうか難しく考えること無かったのね。
PORTの処理は単に別にすればよいと
60nobodyさん:02/03/27 11:02 ID:???
URIの分解は、素直にURI.pm使ってるよ。楽チン。
61nobodyさん:02/03/29 18:33 ID:dJEnZQgW
age
62 :02/03/31 17:15 ID:+CJv1xys
インタープリタ言語でモジュールを必要以上に使いまくる漢がいるな
63nobodyさん:02/03/31 18:28 ID:???
>>62
楽したいからperl使うんだろ。
64 :02/04/06 03:00 ID:Q2ecuzSu
接続先のサーバが落ちてたりすると1分ぐらい放置されるんだけど、
反応が10秒間なかったら受信待ちを止めるとかはできませんか?
65nobodyさん:02/04/06 06:28 ID:???
>64
シグナル・アラームを使えよ! 使えない環境なのか? どうなんだよ、
ハッキリしろよ、このチンカスがっ!
6664:02/04/06 22:33 ID:ZVzzBO7a
alarm()は使えます。
whileで複数のファイルを順番に読み込みたいのですが、
1つ目のファイルで$SIG{'ALRM'}の処理をすると、
そこで終了してしまいます。
終わらせずに次のファイルを読み込ませることは可能ですか?
67nobodyさん:02/04/07 02:50 ID:???
>66
どういうコードを書けばそうなるんだ! 答えてみろよ! またシカトかよ!
ハッキリしろよ、このウンスジがっ!
68nobodyさん:02/04/07 05:30 ID:0gb5rv3T
http://search.cpan.org/search?dist=Net-MySQL

MySQLをIO::Socketで直接操作。。。
これってCGI-MLとかに出てくる人?
69nobodyさん:02/04/07 05:53 ID:???
>>68
そうだよ。
CGI-MLよりperl-ooのがしっくりくるけど。
70nobodyさん:02/04/07 10:05 ID:???
てゆうか、DBI-JPが初出じゃないのか。
71nobodyさん:02/04/09 03:39 ID:???
>>70
今は亡きPerl-Win32-Jじゃないっけ?
これまた今は亡きスリーウェブの人だった頃に
見かけはじめたような気がする。

最近のシグネチャででてるPerlのYahooメッセンジャーも
IO::Socketネタだね。
http://ymca.infoware.ne.jp/?browse=ProductInfo

ヤフー的にアリなのかこーいうの???
72nobodyさん:02/04/30 21:03 ID:???
test
73nobodyさん:02/05/01 06:52 ID:???
hoge
74nobodyさん:02/07/16 22:48 ID:???
移転先の鯖から読めんぜ。
75socket初心者:02/10/04 05:19 ID:EErsm4Mz
bindで名前をつけようとすると
permissionが許可されてないとでるのはなぜ?

念の為にソース

my ($myport) = @_;
my $proto = getprotobyname('udp');
socket(Sock, &AF_INET, &SOCK_DGRAM, $proto) || die "socket: $!";
if($^O ne 'MacOS'){
setsockopt(Sock, SOL_SOCKET, SO_BROADCAST, 1)|| die "setsockopt: $!";
}
my $this = &sockaddr_in( $myport, &INADDR_ANY() );
bind(Sock, $this) || die "bind(syslog): $!";
76n:02/10/04 05:52 ID:ixFnVKaB
77nobodyさん:02/10/04 12:54 ID:???
なんでこんなモジュール1つのために単発スレ立ててるの?
78 ◆U5598YGuzE :02/10/04 12:56 ID:???
>>こんなモジュール1つのため
厨房にとっては他のモジュールより100倍大事なんだよ
79nobodyさん:02/10/04 12:59 ID:???
こんなモジュール使わなけりゃ2・3行で書けるのにねぇ。。。
80use Socket;:02/12/17 21:53 ID:+/VfoKAG
>>78
うっせーよw
Socketは楽しいじゃないか。厨房かも知れないけどさ・・・
81nobodyさん:02/12/24 17:17 ID:2kS8TiT1
age
82山崎渉:03/01/15 13:40 ID:???
(^^)
83山崎渉:03/03/13 17:41 ID:???
(^^)
84nobodyさん:03/04/17 10:19 ID:GlJoeOTi
age
85山崎渉:03/04/17 11:57 ID:???
(^^)
86山崎渉:03/04/20 06:27 ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
87nobodyさん:03/04/26 15:16 ID:z2X+CXJ9
age
88nobodyさん:03/04/26 16:25 ID:???
めんどくさそうだね
89山崎渉:03/05/22 02:07 ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
90山崎渉:03/05/28 17:18 ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
91山崎 渉:03/07/15 11:16 ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
92山崎 渉:03/08/02 02:35 ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
93ぼるじょあ ◆ySd1dMH5Gk :03/08/02 05:15 ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
94山崎 渉:03/08/15 23:04 ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
95nobodyさん:04/06/02 23:56 ID:RiFz2Frq
Socketモジュールの説明してるところ全然無いね
96nobodyさん:04/06/03 00:08 ID:???
% perldoc -m Socket
97nobodyさん:04/07/23 22:27 ID:28JcNBl1
amd64 環境だと、alarm 使い終わった後に明示的に $SIG{ALRM} = "IGNORE"; しないと、SIGPIPE を吐き出しちゃうみたい。
98nobodyさん:04/12/22 18:58:48 ID:???
hoshu
99nobodyさん:2007/07/04(水) 23:17:40 ID:/v4FuUdg
2年半ぶりにage
100nobodyさん:2007/09/26(水) 12:31:28 ID:???
101nobodyさん:2008/12/24(水) 01:35:52 ID:???
ソケットはいいよね・・・
102電脳プリオン:2011/12/11(日) 22:18:01.05 ID:??? BE:324326584-2BP(1960)

  ∧_∧
  ( ・∀・)      | | ガガッ
 と    )      | |
   Y /ノ      .人
    / ) .人   <  >_∧∩
  _/し' <  >_∧∩`Д´)/
 (_フ彡 V`Д´)/   / ←>>86
            / ←>>92
103nobodyさん
      _
      |O\
      |   \ キリキリ
    ∧|∧   \ キリキリ
ググゥ>(;⌒ヽ    \
    ∪  |     (~)
     ∪∪   γ´⌒`ヽ
     ) )    {i:i:i:i:i:i:i:i:}
     ( (    ( ´・ω・)、
           (O ⌒ )O
            ⊂_)∪