2015-08-03 67 views
1

我一直在尋找所有的互聯網上的答案,但一直沒能找到一個截至目前。我對網絡非常陌生,所以請接受我幾乎不知道任何事情。我能夠使用套接字向LAN網絡上的計算機發送數據,但是我想知道是否可以按照我的說法連接到我的朋友家中的計算機,並使用套接字向計算機和計算機發送數據(無telnet或netcat服務器)。或者這是不可能的,我應該看看一個不同的python庫,或者我應該設置某種服務器,這兩臺機器將連接到?可以使用套接字連接python中不同網絡上的多臺計算機嗎?

任何幫助將不勝感激,並請考慮到,我是新來這個帳戶...

回答

1

是的,它是可能的。

您所需要的只是要連接的計算機的主機名或IP地址和端口號。只要能夠建立到遠程機器的路線,就可以建立連接。

看看socket模塊。這裏有一個簡單的例子:

import socket 
s = socket.socket() 
s.connect(('123.123.123.123', 10000)) 

這將試圖建立與IP地址123.123.123.123端口10000 TCP連接到遠程機器的遠程機器需要有10000端口開放,即服務偵聽在該端口上的連接以及在任何防火牆設備中打開的端口10000。

而不是IP地址,你也可以使用主機名:

s.connect(('remote.host.com', 10000)) 
2

主要的(抽象)的想法很簡單。你在網絡中有兩個節點(計算機)(這次是互聯網),所以你應該能夠將它們連接在一起。

你可以在它們之間建立一個tcp連接。

套接字對你的情況來說很好,你需要的只是每個節點的公有IP和每個節點中的空閒端口。您可以從this range中選擇您的端口。

Python提供了一個socket module,檢查它,它非常簡單和容易。你也可以看看some examples

然而實際地說,你需要打開防火牆中的這些端口,同時還做一些配置根據您的操作系統上,讓這種溝通。

2

套接字應該工作,但也有一些注意事項:

  • 如果服務器(假設你使用TCP套接字)是一個防火牆或NAT(通常,如果你有一個路由器),你會需要它的背後配置爲將公共接口上的端口(從Internet可見)重定向到本地端口。
  • 您需要知道您的朋友的公共IP或主機名以連接到它們。

如果你的網絡是這樣的:

+---------------+ +-----------+ +--------+ +---------------+ +------------------+ 
| Your computer |-->|Your router|-->|Internet|-->|Friend's router|-->|Friends's computer| 
+---------------+ +-----------+ +--------+ +---------------+ +------------------+ 
    192.168.0.5  host.isp.com     friend.isp.com  192.168.2.55 

和你的朋友正在運行其本地網絡上的服務器,在端口9000(例如),那麼你連接到friend.isp。 COM:9000。如果其路由器配置爲將friend.isp.com接口(internet)上的端口9000的流量重定向到192.168.2.55(本地機器),則應該正確建立連接。

2

這是可能的,但它會需要在你的朋友的路由器上的一些配置。原因是,現在每個人都有一個由服務提供商提供的公共IP地址。這個IP地址本身並不是固定的,但它很容易查找什麼是當前IP @https://www.whatismyip.com/

現在發送不會是一個問題,但接收是。比利時Telenet等一些服務提供商不允許使用任何端口,您必須查明允許哪些端口。衆所周知的端口很可能不被允許。例如,如果沒有首先聯繫您的ISP,就無法託管網絡服務器。例如港口10000將工作。聯繫您的ISP以瞭解這些限制。

接下來的問題是,你們兩個都有一個路由器和一個私有IP @在支持NAT/PAT的路由器後面的私有網絡。例如,如果我在我的電腦上執行ipconfig,我會得到以下IP @ 192.168.1.99。這個IP @在我的路由器後面是獨一無二的,但它在整個互聯網上並不是唯一的,因此這些IP @不能在通過互聯網進行通信時直接使用。因此,路由器將使用NAT/PAT和一些基於傳出數據包填充的查找表。你發送了一些東西,nat/pat表被創建,你的私有IP @被公有的IP和替換的端口分配。當有回覆時,該端口用於將其更改回原始請求的IP @。出於這個原因,發送不是問題,但接收是。

要解決此問題,您的朋友必須設置端口轉發或將電腦放在demiliterized區域,這取決於有問題的路由器。端口轉發就像手動填寫NAT/PAT表一樣。如果有東西到達此端口,請使用該端口將其發送到該專用IP @。

發送和接收機器的下一個問題是防火牆。防火牆必須關閉或配置爲允許您計劃使用的端口上的傳出和傳入流量。

如果你瞭解所有這些,那麼你可以使它工作。但是,如果Chineze對你來說都是如此,那麼你將會遇到很多困難。所以得出的結論是,這是可能的,但有一些警告需要解決。 有很多人試圖完成你在這裏描述的內容,並且在使其工作中遇到很多麻煩。如果你真的是一個新手,我會嘗試找到有經驗的人,否則你會失去你的頭髮嘗試。(通過從挫折中拉出自己)

你使用python或任何其他編程語言的事實不是與本次討論相關。這純粹是一個網絡問題。

有關NAT/PAT的更多信息:http://www.webopedia.com/DidYouKnow/Computer_Science/NAT_and_PAT.asp

相關問題