他のプログラムが作ったソケットハンドルを取得するには?


rash  2002-10-27 23:12:11  No: 50511  IP: [192.*.*.*]

Socket プログラミングについて質問があるんですが。 
最初、WSAStartup 関数やって、socket 関数でソケットを取得すると思いますが、 
既存のソケット(他のプログラムが作ったソケット)を取得したいんですがやりかたがよくわかりません。 
開発環境は WinXP Prp. VC++6.0 です。よろしくお願いします。 
API でそういうようのがあればいうことないです。(API なら VB で使える)

編集 削除
YuO  2002-10-28 22:10:12  No: 50512  IP: [192.*.*.*]

ドキュメントを読んだ限り,
WSADuplicateSocketとWSASocketで複製できそうな感じです。

編集 削除
rash  2002-10-29 01:24:39  No: 50513  IP: [192.*.*.*]

WSADuplicateSocket()・・・初めて目にする関数です^^;
いろいろ調べました。

int WSADuplicateSocket (
  SOCKET s,                          
  DWORD dwProcessId,                 
  LPWSAPROTOCOL_INFO lpProtocolInfo  
);

構文はこうですよね?
第二引数にはそのソケットハンドルを所有するプロセスハンドル
を与えると、第三引数に構造体でいろいろな情報が帰ってきて、
それをWSASocket() に与えればいいんでしょうか?
もしそうなら第一引数のソケットには何を与えれば・・・?!

私がほしいのは他プロセスが作ったソケットハンドルですので、
もしその第一引数にはそのソケットを与えるのでしたら、この関数は
使えないということでしょうか?

編集 削除
rash  2002-10-29 01:46:23  No: 50514  IP: [192.*.*.*]

えと、最終的にやりたいことを書いておきます。

あるプログラムがサーバ間でデータをやり取りしているとします。
その受信および送信したデータを解析(見る)したいのです。
そういうソフトは既存していると思いますが、自分で作ってみたい
と思っています。

データをやり取りしているプログラムのソケットハンドルを取得す
ればできるかな〜っと思ってるんですけど、根本的に考えが間違っ
てるかなぁ。

編集 削除
YuO  2002-10-29 14:16:23  No: 50515  IP: [192.*.*.*]

あっ,そうか。
WSADuplicateSocketはDuplicateHandleのようにはいかないですね……。

パケットモニタは,ソケットより下層で取得するんじゃないかなぁ……。
#TCP/IPはソケットレベルでしか使ったことがないので……。

編集 削除
rash  2002-10-29 23:51:52  No: 50516  IP: [192.*.*.*]

奥が深そうですね・・・。

もう少し研究してみます。

編集 削除
NoiNoi  URL  2002-11-08 04:12:05  No: 50517  IP: [192.*.*.*]

ぜんぜんけんとうちがいな事をいっていたらすみません。

typedef u_int           SOCKET;
typedef unsigned int    u_int;

SOCKET  ←ソケットってこれのことですよねえ。。

他のプロセスが接続中のものを横取りするようなものは知りませんが。
このソケットってハンドルっていうよりソケットIDって感じがするのですが、、、

そのままソケットに同じ整数をいれて
int i=recv(SAVER_cliant_Socket,(char *)&data,size,0);//データの受信
ってのはどうでしょうか?
やったことないので自信ないですが。

それともわかっているのはポート番号だけですか?

最終兵器としてはwinsock32.DLLを自前のものと入れ替えるという手があります。

ソフトウェア、ファイアウォールってどうやってるんだろう(笑

ととりあえず知っていることだけを書き連ねてみました。

編集 削除
YuO  2002-11-08 08:58:56  No: 50518  IP: [192.*.*.*]

Win16じゃないんだから……。

とりあえず,ソケットハンドルはプロセス固有と考えた方がよいと思います。
HWNDなどの一部を除くハンドル全てについてこのことは言えますが。

たとえ,ソケットハンドル自体はシステムユニークでも,
ソケットの情報にWS2_32.DLLがアクセスできない可能性がありますし。

編集 削除
YuO  2002-11-08 22:54:20  No: 50519  IP: [192.*.*.*]

ちょっと関連しそうな情報@ファイアウォール>NoiNoiさん

http://cgi.members.interq.or.jp/gold/marken/
の丁度消えている発言
http://n76cd-01p05.ppp11.odn.ad.jp/log/06677.html
なんか参考にしてみてはどうでしょう。
これを元に探せば色々知ることができそうです。

過去ログに入ったら
http://n76cd-01p05.ppp11.odn.ad.jp/old/06700.html#06677
になると思います。
#つーか,n76cd-01p05.ppp11の部分が変わったりして。

編集 削除
NoiNoi  URL  2002-11-09 10:10:23  No: 50520  IP: [192.*.*.*]

>YuO様
情報ありがとうございます。
せめてやり方が発見できるまで調べようと頑張っていたら朝の9時になってしまいました。
今日は弟の音楽会が10時からあるのに、、、、


で、しらべた結果、、、、一晩では解決法すら見つかりませんでした。

サーキットレベルゲートウェイ
http://ash.jp/ash/store/lw99/counter.htm

どちらもゲートウェイですからデータを中継ということになり、、、
横取りではないですね、、、、

何でかしらないけどスーパーサーバ(super server)に行き着いたわけです。
http://www.fc-lab.com/network/program/inetd/index.html

でもなんかこれUNIXくさいので意味不明です。
/etc/servicesに以下の内容を追加します. <ここら変が

でデーモンとかそこらへんをみていて行き着いたさきが
最強のポートスキャンツール nmap
http://itnavi.net/securityscan.php

ここらへんで目的がなんなのかわからなくなってきた気分、、、、

http://www.insecure.org/nmap/

とりあえず特定のネットワークデバイスに行くはずのパケットを全部横取りしてネットワークデバイスにデータが届かなくなればいいのでしょうか、、、

編集 削除