特定のソケットIDにパケットを送りたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
びす
記事: 31
登録日時: 14年前

特定のソケットIDにパケットを送りたい

#1

投稿記事 by びす » 13年前

winsockを使って通信している対象プログラムの利用しているソケットIDがわかるとして、
そのソケットIDへパケットを送るようなプログラムを作りたいです
(Winsock Packet Editorのような)

調べてみてもサッパリわからず
こんなものかな?と想像で作ってみましたが、やはりダメでした><

いったい何を調べればいいかもわからない状況です..
タイトルのようなプログラムを作る際に、足がかりになるようなページ等を教えてもらえないでしょうか

どうぞよろしくお願いします

コード:

#include <winsock2.h>
#include <iostream>

using namespace std;

#pragma comment(lib,"ws2_32.lib")

int main() {

	WSADATA wsaData;
	SOCKET sock;

	WSAStartup(MAKEWORD(2,0), &wsaData);

	cout << "ソケットIDを入力" << endl;

	char buf[256];
	cin >> buf;

	sock = atoi(buf);

	char sendbuf[] = {1,2,3,4,5,6,7,8,9,0};

	// 送信
	send(sock, sendbuf, sizeof(sendbuf), 0);

	WSACleanup();
	return 0;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 特定のソケットIDにパケットを送りたい

#2

投稿記事 by softya(ソフト屋) » 13年前

すくなくともTCP/UDPかは決めないとパケットは送信できません。
その前に結構出鱈目なことをしているので、まずwinsockの使い方を学んで下さい。
「Geekなぺーじ:winsockプログラミング」
http://www.geekpage.jp/programming/winsock/

sock = atoi(buf);//(重要)socket関数の戻り値を入れて下さい。
その他にも足りないものは沢山あります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
びす
記事: 31
登録日時: 14年前

Re: 特定のソケットIDにパケットを送りたい

#3

投稿記事 by びす » 13年前

返信ありがとうございます
softya(ソフト屋) さんが書きました:すくなくともTCP/UDPかは決めないとパケットは送信できません。
TCPです
softya(ソフト屋) さんが書きました:sock = atoi(buf);//(重要)socket関数の戻り値を入れて下さい。
作りたいのは、"他のプログラムがsocketして戻ったSOCKETを入力し、そこへパケットを送る"ものなのですが、
こちらのプログラムでもsocketをする必要があるのでしょうか?
softya(ソフト屋) さんが書きました:その前に結構出鱈目なことをしているので、まずwinsockの使い方を学んで下さい。
「Geekなぺーじ:winsockプログラミング」
http://www.geekpage.jp/programming/winsock/
ありがとうございます、勉強してきます

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 特定のソケットIDにパケットを送りたい

#4

投稿記事 by softya(ソフト屋) » 13年前

そもそも、そのソケットIDってなんなのでしょうか?
SOCKETの値(ソケット識別子)のことなら他のプロセス(別の仮想空間)の値は使い回せないはずです。
そんなワザって何処かのサイトや誰からか聞いたのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
びす
記事: 31
登録日時: 14年前

Re: 特定のソケットIDにパケットを送りたい

#5

投稿記事 by びす » 13年前

softya(ソフト屋) さんが書きました:そもそも、そのソケットIDってなんなのでしょうか?
参考にしている"Winsock Packet Editor"で送信先の入力欄に"OPEN SOCKET ID"と書かれていることや、
こちらの質問「ソケットIDって何ですか?」を見て、ソケットIDという名称なのだと勘違いしていました
ソケット識別子というんですね..失礼しました
softya(ソフト屋) さんが書きました:SOCKETの値(ソケット識別子)のことなら他のプロセス(別の仮想空間)の値は使い回せないはずです。
そんなワザって何処かのサイトや誰からか聞いたのでしょうか?
前述の"Winsock Packet Editor"で別のプロセス(WPE.exe)からパケットを送信するという芸当ができたので、できるものだと思いました

//編集 5/7 15:32 すみません、Windows じゃなくて Winsock でした..

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 特定のソケットIDにパケットを送りたい

#6

投稿記事 by softya(ソフト屋) » 13年前

この情報だけだと"Winsock Packet Editor"が"OPEN SOCKET ID"を内部的にどうやって扱われているか分かりませんね。
一般的なwinsockプログラミングでは、ソケット識別子を数値として扱うようなことはしませんのでwinsock内部でどの様なことをして管理しているか把握していないと同じ事をするのは難しいと思います。
試しに検索してみたら、海外サイトで"Winsock Packet Editor"が"OPEN SOCKET ID"と同じ処理するにはどうすれば?と言う質問を見つけましたが返事がない状況でした。一般的な方法じゃないんでしょう。

"Winsock Packet Editor"のソースコードが公開されているなら、それを解析するほうが良いと思います。
【訂正】こっちもWinsock Packet Editorに修正。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
びす
記事: 31
登録日時: 14年前

Re: 特定のソケットIDにパケットを送りたい

#7

投稿記事 by びす » 13年前

softya(ソフト屋) さんが書きました:この情報だけだと"Winsock Packet Editor"が"OPEN SOCKET ID"を内部的にどうやって扱われているか分かりませんね。
一般的なwinsockプログラミングでは、ソケット識別子を数値として扱うようなことはしませんのでwinsock内部でどの様なことをして管理しているか把握していないと同じ事をするのは難しいと思います。
試しに検索してみたら、海外サイトで"Winsock Packet Editor"が"OPEN SOCKET ID"と同じ処理するにはどうすれば?と言う質問を見つけましたが返事がない状況でした。一般的な方法じゃないんでしょう。
わざわざ検索までしていただいて、本当にありがとうございます
やはり、一筋縄では行かないですね..
softya(ソフト屋) さんが書きました:"Winsock Packet Editor"のソースコードが公開されているなら、それを解析するほうが良いと思います。
なるほど!WPEのソースコードを調べるという手がありましたね!
調べたところ、WPEのものは見つかりませんでしたが同じようなツールがオープンソースで開発されていました
そちらのほうを調べてみたいと思います

あと「ソケット識別子は他のプロセス(別の仮想空間)の値は使い回せない」ということで
「なら、同じプロセスならできるのか?」と気がついたので
対象プロセスへDLLをインジェクションして、そこから送信する方法も試してみたいと思います

softya(ソフト屋)さん、本当にありがとうございました
進展したら、報告にきます
また詰まってしまったら、どうぞよろしくおねがいします><

アバター
びす
記事: 31
登録日時: 14年前

Re: 特定のソケットIDにパケットを送りたい

#8

投稿記事 by びす » 13年前

対象プロセスに、ソケット識別子を入力するダイアログ表示→ボタン押下で識別子へsend するDLLをインジェクションしたところ、成功しました!
WSAStartupも必要なく、本当にsendのみで送信できました

またよろしくお願いします!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 特定のソケットIDにパケットを送りたい

#9

投稿記事 by softya(ソフト屋) » 13年前

解決した場合、本来ならソースコードの掲載をお願いする所ですが不正なことに使えそうなプログラムですので掲載しない方向でお願いします。

>WSAStartupも必要なく、本当にsendのみで送信できました
WSAStartupもsocketもconnectも接続している本来のプロセスが行なっているので不要ですよ。
[補足]
ソケットエラーやパケットが混じった時にどうなるかは神のみぞ知るって事になると思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る