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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Linux

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

Q&A

解決済

1回答

4174閲覧

pythonでのTCP通信

kail_singer

総合スコア12

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Linux

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

0グッド

0クリップ

投稿2017/03/19 12:22

サイバーセキュリティプログラミングという本でkali-linuxを用いてクライアントとサーバーの通信をするプログラムをそのまま書き写して実行したのですが、よく分からない点があるのです。target_hostがgoogleとなっているのですが実行して大丈夫なのでしょうか?このプログラムでどうやって通信をすればいいのでしょうか?初心者なので教えてほしいです!
TCPクライアント

coding: utf-8

import socket
target_host = "www.google.com"
target_port = 80

socketobject create

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#connect to server
client.connect((target_host,target_port))
#transmission of data
client.send("GET /HTTP/1.1\r\nHost: google.com\r\n\r\n")
#reception of data
response = client.recv(4096)
print response
TCPサーバー

-- coding: utf-8 --

import socket
import threading
bind_ip = "127.0.0.1"
bind_port = 9999
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))
server.listen(5)
print "[*] Listening on {0}:{1}".format(bind_ip,bind_port)

The thread which handles the connection from a client

def handle_client(client_socket):

I handle the data which a client transmitted

request = client_socket.recv(1024)
print("[*] Received: ", request)

return of packet

client_socket.send(b"ACK!")
client_socket.close()
while True:
client,addr = server.accept()
print("[*] Accepted connection from: {0}:{1}".format(addr[0],addr[1]))

Start of a thread processing reception data

client_handler = threading.Thread(target=handle_client,args=(client,))
clinent_handler.start()

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

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

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

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

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

can110

2017/03/20 00:18

ソースコード全体の前後を```で囲み、「コード表示」になるように質問本文を修正ください。
guest

回答1

0

ベストアンサー

2つのコードが挙げられていますね。

1つ目のコードは、www.google.comにあるHTTPサーバGETリクエストしてその結果を表示してます。これは普通のブラウザでgoogleページを開くのと基本的には同じ動きなので問題ありません。

以下は実行例ですが、質問本文中のGET /HTTP/1.1~GET / HTTP/1.1~に修正(GETのあとに半角空白1文字追加)しています。

Python

1# -*- coding: utf-8 2import socket 3 4target_host = "www.google.com" 5#target_host = "www.example.com" 6target_port = 80 7 8client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 9client.connect((target_host,target_port)) 10#client.send(("GET / HTTP/1.1\r\nHost: %s\r\n\r\n")%(target_host)) 11client.send("GET / HTTP/1.1\r\nHost: google.com\r\n\r\n") 12response = client.recv(4096) 13print response

実行結果

HTTP/1.1 302 Found Cache-Control: private Content-Type: text/html; charset=UTF-8 Location: http://www.google.co.jp/?(略) Content-Length: 261 Date: Sun, 19 Mar 2017 23:56:48 GMT <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.jp/?(略)">here</A>. </BODY></HTML>

ほか、(www.example.com)[http://www.example.com]などの結果も確認できますのでご自分で試してみてください。

2つ目のコードはローカル上でTCPサーバを起動しています。
1つ目のコードの接続先として127.0.0.19999を指定するとACK!と結果が返ってくるはずです。

投稿2017/03/20 00:17

can110

総合スコア38262

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

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

kail_singer

2017/03/21 05:44

くわしい回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問