當前位置:首頁 » 操作系統 » nat源碼

nat源碼

發布時間: 2022-04-15 10:37:20

『壹』 NAT C#,要用C#寫的、UDP穿越NAT的源碼、源碼

UDP穿越NAT的話,需要對端配合的,否則沒辦法穿越,只能對方先在子網後面對公網地址發起UDP呼叫,公網計算機才能在一定時間里回應,回應的UDP包可以穿越nat到達源機器。

如果兩邊都在子網後面,那就需要作一個狀態伺服器,維護兩方的NAT映射信息。

很簡單。我從前做過實驗。

你要是已經懂了原理,怎麼會做不出程序?

『貳』 奔騰NAT的性價比如何值得入手嗎

房子里有一個舊的奔騰。到目前為止,除了肉和油,沒有什麼大問題。2.0噸汽車重量,5AT,1.88,但是TM太貴了,每公里70美分!一汽,最好的基礎,最壞的現狀,半死不活,東北公司的縮影。我們有幾個合資企業,市場改變了技術。

『叄』 C#UDP穿越NAT,UDP打洞,UDP Hole Punching源代碼,該怎麼處理

首先要有一個沒有nat的公網伺服器,
每個用戶使用一個埠與伺服器通訊 ,伺服器在收到用戶連入請求後把用戶的標識符跟用戶的埠號匹配保存起來
當另一個用戶請求該用戶時把該用戶對應的埠號返回 然後用戶之間互相用指定埠號聯系 就是打洞了
伺服器要維系連接要定時發心跳包

『肆』 TCP穿透NAT

談談我的理解:
首先,tcp不同於udp,tcp天生就是不對等的連接,因此穿透nat就顯得很困難。
最為簡單的一種方式:
客戶端:a,b
伺服器端(公網)c
a發送消息給c,同時c拿到a的ip埠等信息,將a提出的請求轉發給已與c連接的b,b表示同意後發送消息給c,c將消息反饋給a,同時為a和b的通信做准備(分配埠等等),整個過程是客戶端到伺服器再到客戶端,c起中轉作用,a與b建立連接實際是a與c,b與c建立的連接。
一般對於可靠性要求較低的應用會使用udp實現。
優點:適用於所有類型網路,簡單;
缺點:佔用帶寬,速度慢。
早期的msn就是這種方式。
第二種方式:TCP的p2p技術。
這種方式是目前最熱門的,我也正在看。
轉一下來自cmu(卡耐基梅隆)牛人們的研究:
××××××××××××××××
原文:http://www.andrew.cmu.e/user/ggw/WBFD.pdf

由於工作需要,在網上找了很長時間P2P的資料,好像只有《P2P 之 UDP穿透NAT的原理與實現(附源代碼)》比較有實際意義,可惜又是用UDP實現的,無奈只好找了份英文資料啃,發現很有參考價值,就根據理解翻譯了一部分,分享給大家,由於水平有限,有錯望多多包涵。如果有人能夠繼續翻譯下去別忘了通知我哦呵呵,[email protected],感謝。

摘要
防火牆和網路地址轉換(NAT)設備對於傳統的P2P協議存在一定的問題。一些中間設備抑制了來自外部網路到內部網路的TCP請求,這篇文章的目的就是尋找一個能夠在兩個NAT設備內部的主機間建立TCP連接的方法。我們已經在兩個普通的硬體條件下實現了這個功能。

1.入門
由於32位IP地址的減少,現在出現了很多通過一個internet地址代理內部網路上網的設備,這就是NAT技術。這些設備對於INTERNET已經越來越重要了,但是它們的獨立發展因為缺乏標准而對現在的internet協議造成危害。

2.技術
典型的NAT和防火牆設備都是不允許外部地址主動請求而進入內部網路的,如果用戶的程序需要在兩個內部網路間建立直接性的連接,那麼兩個內部設備之間必須是相互信任的。如果A和B兩個部分都初始化了TCP連接,NAT設備就會認為它們之間是相互信任的,也就允許它們之間的連接了。
圖1是一個例子,目標是能夠讓A和B(分別在NATA和NATB後)建立TCP連接。
我們討論了多種在特定的NAT設備環境下的TCP連接方案。
如果我們的情況如下:
1、可預測NA的埠,可預測NB的埠,可指定源IP的特定路由
2、可預測NA的埠,可預測NB的埠,不可指定源IP的特定路由
3、隨機的NA埠,可預測NB的埠,可指定源IP的特定路由
4、隨機的NA埠,可預測NB的埠,不可指定源IP的特定路由
5、隨機的NA埠,隨機的NB埠,可指定源IP的特定路由
6、隨機的NA埠,隨機的NB埠,不可指定源IP的特定路由

我們必須作出這4種假設:
1、 兩個主機都不受NAT設備所限制;
2、 我們可以配置網路設備使得主機看不到來自外部網路的ICMP包(TTL超過限制),因為這些ICMP數據包無論被任何一方接收到都是中斷TCP連接。我們討論的一些解決方案就依賴通過發送一個初始TTL很小的SYN包來建立TCP連接。一旦SYN包被路由器丟棄,ICMP TTL 超時包就會被傳送到NAT設備,我們不允許NAT設備將這個超時TTL的返回包傳送到內部網路,即使NAT會將這個包傳送到內部,也需要通過配置防火牆來限制這個包到達主機;
3、 即使NAT設備看到ICMP超時的數據包,設備本身的映射表將不會作任何改動;
4、 內部網路的其它主機不會佔用搶占這個埠,因為如果網路特別繁忙,這個埠可能會無效。

3.1第一種情況
我們可以通過圖2表示的順序解決問題:
1)A和B可以設定LSR(IP報頭中的一個選項)通過X路由發送SYN數據包.
2)X可以緩存它們的數據包並且發送欺騙的SYN+ACKS給NA和NB.
3)A和B可以通過由X發送來的數據進行應答.
4)X丟棄這兩個ACK包,因為它已經可以確定A和B相互應答成功.

圖2是假設A和B都事先彼此的NAT的通信埠,A知道B的通信埠是NB:5000,B知道A的是NA:4000,並且要求X不在任何NAT設備的後面.實際中這兩個埠是預測得到的,預測過程如圖3:

3.2第二種情況
第一種情況依賴與自由設定路由,但是現在很多路由器大多都限制這樣做,並且會丟棄這樣的服務請求包。因此在實際應用中,這種方案失敗的可能性很大。如果自由設定路由不可行,我們可以通過out-of-band通道(他們預先與X連接好的TCP連接)來傳送原本必須將數據包路由到X才能看到的包。注意在圖二的第二步X已經知道了TCP的序號Q和P,因為X已經收到了這兩個SYN包,但是如果數據包沒有路由經過X就不可能收到它們。為了初始化這個連接,兩個主機發送初始SYN包,並且他們都知道是不可能到達目標的,但是它們都可以記住自己的SYN號(個人看法,通過鉤子獲得發送的數據SYN包)並且可以發送給X,X得到了它們的SYN包,就可以欺騙它們發送ACK包了。有兩種方法可以發送無法到達目標的數據包。簡單的方法就是每個主機發送一個SYN給對方,要求應答包不會到達內部網路.如果NAT(防火牆)會將應答包傳回給內部網路,通常是發送TCP的reset包(RST),如果NAT生成RST包,A和B就不能簡單地發送一個向圖2中SYN給彼此,因為如果這樣NA和NB就無法打洞了呵呵,如果NAT不發送RST包,那麼這個TCP連接就不會被中斷。另外一個發送無法到達目標網路的SYN包的方法是減小TTL值,使它們無法彼此到達。如果用戶無法配置防火牆丟棄這個ICMP應答包,或者NAT不繼續傳送這個ICMP,這個TCP就不會立即關閉。這個解決方案不能使用一種簡單的欺騙,因為我們必須保證源地址的SYN包發送者不會沒有收到ICMP的RST包,否則會導致中間設備建立錯誤路由.僅僅依靠SYN包,NAT就可以建立從internet IP和埠到外部IP和埠的路由.由於欺騙的SYN包是錯誤的源IP(並非發出者X),這個路由將不會發送到X而是發送到NA或者NB。另外,這種方案都需要設置TTL到足夠小,以便於對方的NAT不會收到到各自發出的初始SYN包,否則就無法完成打洞。(圖4)

3.3第三種情況
比前兩種簡單,但是X將無法預見NA或者NB的埠。B將先給X發送一個SYN包告訴以便於X知道它所選用的埠號,然後X將這個信息發送到A,A就可以向這個確定的地址和埠發送SYN,圖5是第一種情況的變形::
1)X向圖3一樣預測埠,但是它不能預測到NA的下一個埠號,但是可以預測NB的下一個埠號是5000,並且可以通知A和B這個節點已經建立了連接;
2)A和B同步節點X;
3)X可以欺騙A和B;
4)A和B相互發送ACK;
5)X丟棄發給它的ACK,因為它已經可以確認它們已經建立連接。

××××××××××××××××
第三種:實現vpn,通過安全的虛擬連接實現,而這樣的話就不存在穿透問題,因為vpn是個虛擬網路,tcp在其中是被信任的。

『伍』 nat1會降低延遲嗎

設置好了可以降低的。
-網路環境:
我這邊的網路環境,電信189套餐一共送了20條寬頻。其中1條300M下30M上,1條100M下20M上,還有18條是50M下10M上,一條100M對等的聯通,在加上後期拉的2條500M電信對等,所以家裡一共是23條寬頻,都為公網IP。3個電信光貓,1個聯通光貓,若幹路由器,交換機。
-CDN節點共享(閑置流量換錢):
早期,我網路環境沒這么多,就玩迅雷的紅水晶,再到迅雷路由,再到賺錢寶再到玩客雲,可以說是一路走來。其中一代賺錢寶和賺錢寶pro掛的最久,後來不賺錢,就賣掉了大部分,玩客雲因為網路的限制,留了幾台,大部分搶到就是當倒爺。既然寬頻這么多條,涉及到多線多撥,鐵定上軟路由,選愛快,操作簡便,分流效果都挺好。既然有這么多閑置的帶寬,剛好玩客雲出現了現金,買幾台試下,加上寬頻提速加成,效果不錯,於是就買了20幾台,賺點小錢,畢竟窮。
-開始出現問題:
沒想這玩意是真的能跑,20多台設備上傳流量量速率達到了千兆,我用了幾年的3215U 4口的軟路由,開始不堪重負,100%的幹活,也不知道是不是開繁星導致,反正感覺吃不消,但是上網啥的沒問題,但是過了一陣子,發現當ap的ac88u,wifi開始不穩,會掉線,然後比較難連上。這讓喜歡吃雞的女王大人無法忍受,顯然,挨罵是一定的。一開始以為是86u斷流,用排除法,加上acrh17當ap,問題依舊,看來是就是軟路由的鍋。剛好電信有個500M對等的優惠套餐,果斷辦理,為了不受千兆埠限制,讓電信小哥,再拉一條光纖,此時家裡已經有了4個光貓了,電信3個,聯通1。4口的軟路由埠開始不夠用了。寬頻太多,很容易達到千兆瓶頸,一個光貓1G的帶寬。
-性能不夠硬體來湊
剛好同事需要軟路由,把3215u出了。手頭上還有dq77kb+e3 1265l v2,買個4口網卡當軟路由,年少不懂事,上了淘寶買了i350-t4(寨卡)。不過還好用著沒問題。這下性能應該不會瓶頸了,然而,wifi有時會連不上的問提依舊,看來是愛快的bug了,但是愛快用了好多年了,好多配置都在裡面,如果換固件,調配置,比如ddns,埠轉發,分流啥的,就要弄好久。但是wifi的問題不能不解決,剛好在群里看到有人說愛快,當設備跑多了,就會出現這個情況,上個三層交換機就會解決問題。那就上某魚淘個二手的三層交換機來試試吧。後來看到群里有有人提到nat類型,對提高收益有幫助。於是大致了解了下,給大夥貼下。
-Nat類型
1. Full Cone NAT(簡稱NAT1):
所有來自同一 個內部Tuple X的請求均被NAT轉換至同一個外部Tuple Y,而不管這些請求是不是屬於同一個應用或者是多個應用的。除此之外,當X-Y的轉換關系建立之後,任意外部主機均可隨時將Y中的地址和埠作為目標地址 和目標埠,向內部主機發送UDP報文,由於對外部請求的來源無任何限制,因此這種方式雖然足夠簡單,但卻不那麼安全。
2. Restricted Cone NAT(簡稱NAT2):
它是Full Cone的受限版本:所有來自同一個內部Tuple X的請求均被NAT轉換至同一個外部Tuple Y,這與Full Cone相同,但不同的是,只有當內部主機曾經發送過報文給外部主機(假設其IP地址為Z)後,外部主機才能以Y中的信息作為目標地址和目標埠,向內部主機發送UDP請求報文,這意味著,NAT設備只向內轉發(目標地址/埠轉換)那些來自於當前已知的外部主機的UDP報文,從而保障了外部請求來源的安全性。
3. Port Restricted Cone NAT(簡稱NAT3):
它是Restricted ConeNAT的進一步受限版。只有當內部主機曾經發送過報文給外部主機(假設其IP地址為Z且埠為P)之後,外部主機才能以Y中的信息作為目標地址和目標埠,向內部主機發送UDP報文,同時,其請求報文的源埠必須為P,這一要求進一步強化了對外部報文請求來源的限制,從而較Restrictd Cone更具安全性。
4. Symmetric NAT(簡稱NAT4):
這是一種比所有Cone NAT都要更為靈活的轉換方式:在Cone NAT中,內部主機的內部Tuple與外部Tuple的轉換映射關系是獨立於內部主機所發出的UDP報文中的目標地址及埠的,即與目標Tuple無關。
上面是我網路出來,反正只要認為nat1是最好的就行,根據我的經驗來說,像愛快,高恪之類的軟路由都是nat4,。Lede可以nat1,而平常普通路由撥號的nat類型為3,刷高恪和openwrt就可以做到nat1。當然只要你路由器做了dmz也是可以變成nat1,但是這個只能指定內網的一個主機,你多台的就不行。那nat1對提高收益有幫助嗎?對此,我還專門做了測試,拿出礦渣newifi3,編譯了對應的openwrt固件,感謝lean大雕的源碼,開始掛上,做為期幾天的測試,結論是確實可以提高收益,而且對p2p游戲下載啥的也有幫助。
-目前支持nat1固件:
openwrt系列,理論能刷的openwrt都可以
k2p高恪固件,
acrh17也可以刷改版梅林實現full cone(感謝大雕的固件,該有的功能都有。)
梅林固件,目前只有新內核才支持,例如ac86u,ax88u。

『陸』 java tcp nat 打洞

既然知道原理了就按照原理寫唄,tcp打洞關鍵要能地址復用

『柒』 廣域網實現p2p文件傳輸 如何實現nat穿透 求java或C++源代碼

假設有兩台分別處於各自的私有網路中的主機:A和B;N1和N2是兩個NAT設備;S是一個使用了一個眾所周知的、從全球任何地方都能訪問得到的IP地址的公共伺服器
步驟一:A和B分別和S建立UDP連接;NAT設備N1和N2創建UDP轉換狀態並分配臨時的外部埠號
步驟二:S將這些埠號傳回A和B
步驟三:A和B通過轉換好的埠直接聯繫到對方的NAT設備;NAT設備則利用先前創建的轉換狀態將分組發往A和B

源碼已發送請查收

熱點內容
telnet啟動linux 發布:2024-09-29 15:03:01 瀏覽:205
安卓刷機代碼是什麼意思 發布:2024-09-29 14:49:21 瀏覽:959
小米怎麼改為安卓手機系統 發布:2024-09-29 14:23:10 瀏覽:661
阿里雲伺服器無法訪問外網ip 發布:2024-09-29 14:09:27 瀏覽:266
關系資料庫理 發布:2024-09-29 14:08:10 瀏覽:917
androidios與js交互 發布:2024-09-29 14:05:11 瀏覽:105
網游對比單機游戲哪個更吃配置 發布:2024-09-29 14:04:33 瀏覽:725
超級訪問田亮葉一茜 發布:2024-09-29 13:53:20 瀏覽:543
哪個安卓機顏值高性能好 發布:2024-09-29 13:32:39 瀏覽:167
手機安裝web伺服器怎麼樣 發布:2024-09-29 13:28:29 瀏覽:699