質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Q&A

解決済

2回答

1863閲覧

netcatコマンドでのサーバーテストの方法

spookies

総合スコア15

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

0グッド

1クリップ

投稿2019/03/30 09:37

編集2019/03/30 10:04

netcat(nmap付属版)を使ってサーバのテストをしたいと考えています。
netcatはクライアントで以下のような順序メッセージをサーバーに送信します。
送信メッセージ1
応答メッセージ1-1
応答メッセージ1-2
送信メッセージ2
応答メッセージ2-1
応答メッセージ2-2

応答メッセージ1-2を受けたら、送信メッセージを即座に通知したい。
ここでメッセージは送信・応答とも以下のようなフォーマットになっています
「バイナリ(3byte)」「テキスト(可変サイズ)」「テキスト(2byte)」

困っている点は、
現在、送信メッセージ1はファイルから標準入力にリダイレクトしています。

netcat 127.0.0.1 12345 < message1

応答メッセージ1-2の後に送信メッセージ2を送信する方法がわかりません。

netcatでの試験方法、またはnetcat以外でも汎用ツールでサーバのテストは行えないでしょうか?
素直にシミュレータを作成するとかも考えてはいますが・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Bashで対話式にやるならこんな感じで。SMTPサーバーと会話してメールを送る例です。

Bash

1#!/bin/bash 2HOST=localhost 3PORT=25 4 5exec 3<>/dev/tcp/$HOST/$PORT 6 7wait(){ 8 while true 9 do 10 read line <&3 11 echo "$line" 12 if [[ "$line" == $1 ]] 13 then break 14 fi 15 done 16} 17 18wait "[1-9]*" 19echo HELO localhost >&3 20wait "[1-9]*" 21echo MAIL FROM: root >&3 22wait "[1-9]*" 23echo RCPT TO: root >&3 24wait "[1-9]*" 25echo DATA >&3 26echo test mail >&3 27echo . >&3 28wait "[1-9]*" 29echo QUIT >&3

投稿2019/03/30 17:15

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

現在、送信メッセージ1はファイルから標準入力にリダイレクトしていますが
応答メッセージ1-2の後に送信メッセージ2を送信する方法がわかりません。

netcatの標準出力になにか出力されるのを待って、netcatの標準入力になにか入力する、という機構が必要です。ファイルから入力したのでは、一気にすべてを入力してしまいます。

expectというプログラムはそのようなことができます (本家サイト)。どういう出力があったらどういう入力をするかや、どういう出力があったら終了するかなども決めておくことができます。

expectは汎用的なプログラムですが、おなじようなことをするプログラムを自分でつくることもできるでしょう。ですが新しくプログラムを作るのなら、netcatと対話するものではなく、自分でクライアントからの接続を待って通信するものをつくればいいでしょう。

投稿2019/03/30 10:12

編集2019/03/30 12:58
ikedas

総合スコア4227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問