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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

IPv4

IPv4(Internet Protocol version 4)は、インターネットプロトコルの一つ。インターネットに繋がったコンピューターや機器を識別するためのIPアドレスを32ビット表記で表わします。しかしIPv4は、限界があるため、IPv6が次世代プロトコルとして注目されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

1回答

6155閲覧

Pythonで外部PC(IPアドレス)とソケット通信できない。[WinError10061]

akisan55

総合スコア49

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

IPv4

IPv4(Internet Protocol version 4)は、インターネットプロトコルの一つ。インターネットに繋がったコンピューターや機器を識別するためのIPアドレスを32ビット表記で表わします。しかしIPv4は、限界があるため、IPv6が次世代プロトコルとして注目されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

0クリップ

投稿2022/04/25 12:42

編集2022/04/29 17:08

実現したい事

Pythonにおいて外部PCからソケットを受信したい。

概要

server側PCでTCPserverを実行してLISTENING状態にし、
client側PCからパケットをsendしたのですが、WinError10061が出ます。

ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。

socket通信で外部IPアドレスを受信するにはどうすればいいですか。

[server側]
IP = 0.0.0.0,port = 5555

[client側]
IP = 0.0.0.0,port = 5555

確認した事

・client側PCで''netstat -an''を実行しても''0.0.0.0:5555''は有りませんでした。
(server側では0.0.0.0:5555はLISTENING状態になっていました。)
・serverもclientも、自身のPCで通信したら、エラーは出なかった。
・ネットワークに接続しているか。

環境

server側:Windows11 64bit
IP:192.168.0.19
client側:Windows10 64bit
IP:192.168.0.13

ネットワーク構成

LANアダプターデフォルトゲートウェイ:192.168.0.1
サブネットマスク:255.255.255.0
(同じ一つのルーターを使用)
両方python 3.6で実行

補足

TCPserver.pyとTCPclient.pyは
https://github.com/oreilly-japan/black-hat-python-2e-ja/blob/master/chapter-02
を使いました。

補足2

説明不足で申し訳ありません。
環境情報を追加しました。

TCPServer.py

python

1import socket 2import threading 3 4IP = '0.0.0.0' 5PORT = 5555 6 7 8def main(): 9 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10 server.bind((IP, PORT)) 11 server.listen(5) 12 print(f'[*] Listening on {IP}:{PORT}') 13 14 while True: 15 client, address = server.accept() 16 print(f'[*] Accepted connection from {address[0]}:{address[1]}') 17 client_handler = threading.Thread(target=handle_client, args=(client,)) 18 client_handler.start() 19 20 21def handle_client(client_socket): 22 with client_socket as sock: 23 request = sock.recv(1024) 24 print(f'[*] Received: {request.decode("utf-8")}') 25 sock.send(b'ACK') 26 27 28if __name__ == '__main__': 29 main()

TCPclient.py

python

1import socket 2 3target_host = '0.0.0.0' 4target_port = 5555 5 6# ソケットオブジェクトの作成 7client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 8 9# サーバーへ接続 10client.connect((target_host,target_port)) 11 12# データの送信 13client.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n") 14 15# データの受信 16response = client.recv(4096) 17 18print(response.decode()) 19client.close()

tcpserver.pyでLISTENING状態にしてからnetstat -anを実行した結果

プロトコル ローカル アドレス 外部アドレス 状態 TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:2869 0.0.0.0:0 LISTENING TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING TCP 0.0.0.0:49669 0.0.0.0:0 LISTENING TCP 10.0.0.1:139 0.0.0.0:0 LISTENING ~~~~~~~~~~~~~~~~~~~

0.0.0.0 5555が存在しない。

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

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

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

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

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

y_waiwai

2022/04/25 14:15

双方のマシンのIPアドレスはどうなってるんでしょうか。 また、ネットワーク構成はどうなってますか。
sigsegv

2022/04/26 00:40

補足のリンクの先のプログラムは serverもclientも IP=0.0.0.0 でないし port 5555 でもありません。 エラーが発生したプログラムの内容が分かるようにしてください
guest

回答1

0

ベストアンサー

とりあえず回答ですが

  • クライアントの target_host は 0.0.0.0 でなく、サーバの IPアドレス(=192.168.0.19)を指定するべきです(サーバ側は 0.0.0.0 でよいですが)
  • それでも ConnectionRefusedError が出る場合、サーバ側の(もしかしたらクライアント側の)ファイアウォールで通信を拒否していないか確認してみてください。

--

ちなみに、自分の環境(win10,64bit)でこのTCPclient.pyを動かすと
OSError: [WinError 10049] 要求したアドレスのコンテキストが無効です。
になります。質問者の環境で ConnectionRefusedError になるのはクライアント側の
セキュリティソフトか何か関係しているのかも

投稿2022/04/26 14:22

sigsegv

総合スコア895

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

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

akisan55

2022/04/27 13:05

ご回答ありがとうございます。 tcpclient.pyのIPを192.168.0.19に変更しました。 しかし、またもや同様のエラーが出て先に進めませんでした。 ファイアーウォールとセキュリティソフトを全てOFFにしても成功しませんでした。 同じネットワーク(Buffalo-G)に接続しているにもかかわらず、Server側PCで[0.0.0.0:5555]が存在しないのは何故でしょうか。(Client側PCでnetstat -anを実行すると、[0.0.0.0 5555]は存在した。) ご返答を頂けると嬉しいです。
sigsegv

2022/04/27 22:39 編集

serverで、python tcpserver.py を実行したあと netstat -an を実行すると "0.0.0.0:5555 Listen" が無かったということですね? 同一PCで tcpserver.pytcpclient.py を実行したときは通信できたという話ですが、そのときも同じでしょうか クライアントPCに 0.0.0.0:5555 があったということからポート番号 5555 がOSの別のプロセスで使われているかもしれないので、別のポート番号にしてみるとよいかもしれません。
akisan55

2022/04/28 12:57

ご回答ありがとうございます。 (おっしゃる通り、0.0.0.0:5555は別のプロセスが使っていたようです。) 何度もすみませんが、別のポート番号(9998)に変更しても成功しませんでした。 LISTENING状態にすると、今度はServer側PCに「0.0.0.0:9998」が存在しましたが、Client側PCには存在しませんでした。 何故Server側PCに存在する[IP:ポート番号]がClient側にないのでしょうか。 (同じネットワークに接続しています。) 本当に申し訳ありませんが、ご返答お願いします。 (tcpserver.pyを実行する前にnetstat -anを実行すると[0.0.0.0:9998]は存在しなかったので、[0.0.0.0:9998]は別のプロセスが利用しているわけではないと思います。)
sigsegv

2022/04/28 23:41

Listeningはサーバが接続待ちをしている状態を示すものなので、クライアント側には出ません。 サーバで 0.0.0.0:9998 が見えているのなら、tcpserver.py は正常に動作しているのでしょう。 この状態でクライアントで tcpclient.py を実行して(もちろんサーバのIPアドレスを指定して) それでも依然 ConnectionRefusedError が出るのなら、ファイアウォールかセキュリティソフトが 拒否している可能性があります。(特にサーバ側のファイアウォール)
akisan55

2022/04/29 08:08

ありがとうございます。 ファイアーウォールとは別のセキュリティソフトが接続を阻止していたようです。 無事解決しました。 こちらベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問