Socket プログラミングについて質問があるんですが。
最初、WSAStartup 関数やって、socket 関数でソケットを取得すると思いますが、
既存のソケット(他のプログラムが作ったソケット)を取得したいんですがやりかたがよくわかりません。
開発環境は WinXP Prp. VC++6.0 です。よろしくお願いします。
API でそういうようのがあればいうことないです。(API なら VB で使える)
ドキュメントを読んだ限り,
WSADuplicateSocketとWSASocketで複製できそうな感じです。
WSADuplicateSocket()・・・初めて目にする関数です^^;
いろいろ調べました。
int WSADuplicateSocket (
SOCKET s,
DWORD dwProcessId,
LPWSAPROTOCOL_INFO lpProtocolInfo
);
構文はこうですよね?
第二引数にはそのソケットハンドルを所有するプロセスハンドル
を与えると、第三引数に構造体でいろいろな情報が帰ってきて、
それをWSASocket() に与えればいいんでしょうか?
もしそうなら第一引数のソケットには何を与えれば・・・?!
私がほしいのは他プロセスが作ったソケットハンドルですので、
もしその第一引数にはそのソケットを与えるのでしたら、この関数は
使えないということでしょうか?
えと、最終的にやりたいことを書いておきます。
あるプログラムがサーバ間でデータをやり取りしているとします。
その受信および送信したデータを解析(見る)したいのです。
そういうソフトは既存していると思いますが、自分で作ってみたい
と思っています。
データをやり取りしているプログラムのソケットハンドルを取得す
ればできるかな〜っと思ってるんですけど、根本的に考えが間違っ
てるかなぁ。
あっ,そうか。
WSADuplicateSocketはDuplicateHandleのようにはいかないですね……。
パケットモニタは,ソケットより下層で取得するんじゃないかなぁ……。
#TCP/IPはソケットレベルでしか使ったことがないので……。
奥が深そうですね・・・。
もう少し研究してみます。
ぜんぜんけんとうちがいな事をいっていたらすみません。
typedef u_int SOCKET;
typedef unsigned int u_int;
SOCKET ←ソケットってこれのことですよねえ。。
他のプロセスが接続中のものを横取りするようなものは知りませんが。
このソケットってハンドルっていうよりソケットIDって感じがするのですが、、、
そのままソケットに同じ整数をいれて
int i=recv(SAVER_cliant_Socket,(char *)&data,size,0);//データの受信
ってのはどうでしょうか?
やったことないので自信ないですが。
それともわかっているのはポート番号だけですか?
最終兵器としてはwinsock32.DLLを自前のものと入れ替えるという手があります。
ソフトウェア、ファイアウォールってどうやってるんだろう(笑
ととりあえず知っていることだけを書き連ねてみました。
Win16じゃないんだから……。
とりあえず,ソケットハンドルはプロセス固有と考えた方がよいと思います。
HWNDなどの一部を除くハンドル全てについてこのことは言えますが。
たとえ,ソケットハンドル自体はシステムユニークでも,
ソケットの情報にWS2_32.DLLがアクセスできない可能性がありますし。
ちょっと関連しそうな情報@ファイアウォール>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の部分が変わったりして。
>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
ここらへんで目的がなんなのかわからなくなってきた気分、、、、
とりあえず特定のネットワークデバイスに行くはずのパケットを全部横取りしてネットワークデバイスにデータが届かなくなればいいのでしょうか、、、
ツイート | ![]() |