你用socket寫過什麼有趣的程序?


從奇技淫巧P2P,TCP打洞到協議HTTP,SIP到架構模型select,overlapped,IOCP都寫過,但是這些都還是工作在TCP/IP層的,都不是什麼太有意思的事情。

唯一覺得比較有意思的是做了一個學校專用的H3C的撥號客戶端,工作在數據鏈路層,遵循80.11x乙太網 MAC幀包結構。做了Windows和Linux版本下的客戶端。

Lniux下的是用raw socket : tishion/Cuit8021xClient

Windows由於安全原因系統限制了raw socket很多使用場景,所以直接使用winpcaplib來實現,UI使用WTL: tishion/CuitXClient

架構設計和代碼是有點丑,畢竟七八年前在學校寫的代碼

自己和同寢室的室友用了3年多


主要做過一個人流監聽器,用于堅挺人流量的。

raw socket實現,其實就是抓手機wifi的包。


當時還做成了可視化。最後賣給了一個公司......現在都是random mac了,所以就不好玩了。。。哈哈


某些游戲只支持IPv4直連,可惜大學沒有獨立IPv4地址,於是用socket寫了個東西可以把IPv6弄成IPv4,而在游戲裡看到的還是IPv4。。

用了兩年,才知道這玩意叫做代理,有很多現成的東西了。


NAT穿透(魔獸3對戰撮合平台)

------update 20170605 07:13:55

既然大家對這個對戰平台這麼感興趣那我就多說兩句好了。這是在大學裡無聊而寫出來的娛樂作品。

原理其實非常簡單類似於p2p。A如果要加入B的遊戲,過程分解如下,A連接中間人伺服器S。B也連接S。這樣S就知道A,B對應的nat地址。於是S跟B說去連接一下A老哥並把A老哥nat地址告訴B老哥。此時B連接A的nat,八成會被Anat拒絕轉發(但是也有極少的幾率直接連接上,得看Anat類型),因為nat的特性是我主動發包出去了nat才會記錄我的映射。所以B的nat此時就記錄下了A老哥的nat到B老哥的映射。S通知A老哥去連接B老哥的nat。由於B的nat已經有A的nat到B的映射,所以這次連接就成功了!A老哥成功握手B老哥。接下來我們談談war3。war3在建立區域網遊戲的時候會通過6xxx(忘記了)埠對255.255.255.255進行全網廣播udp。udp里包含主機信息,地圖名稱,遊戲版本,人數等信息。當A老哥和B老哥的p2p隧道打洞之後。B老哥建立主機之後,對本機抓包得到udp包。並篡改主機信息為B的nat。然後把udp包發送到A老哥的6xxx那個埠。A老哥的區域網遊戲就可以看到B老哥的主機哩!

war3版本的五花八門和網路波動造成的超高掉線率加之高校玩家暴躁的脾氣導致這個程序惡評不斷最終沒有推廣起來。大家當時還是玩浩方多一些。代碼這麼多年過去了再加之沒有github類似的託管工具也是早已遺失。對於想要看代碼的老哥們只能說聲抱歉了!


用delphi寫的你畫我猜,還加了表白彩蛋?送給妹紙。

然並卵,仍然被發好人卡。


推薦幾個實用的
百度雲命令行下載
https://github.com/GangZhuo/BaiduPCS
c實現ngrok內網穿透
https://github.com/dosgo/ngrok-c
mptun隧道
https://github.com/cloudwu/mptun

調用用ipip的數據重寫個帶位置信息的traceroute


大概是課程設計時寫了一個聊天程序吧,本來還沾沾自喜自己的界面做的漂亮,交互舒服。

後來驗收的時候第二組


結果看到第一組學霸寫的,還能發表情和換皮膚(╯°□°)╯︵ ┻━┻


新鮮出爐
用移動端(Android)和服務端(Node.js)來模擬內網穿透,並進行端對端數據交互的測試
https://github.com/Zane96/P2P_UDP
https://github.com/Zane96/P2P_UDP_SERVER


各種p2p(??ω??)??


類QQ,只是沒有實現語音部分!


仿QQ聊天軟體,後來發現用mina或者netty性能更好


- ping 返回本地天氣(和不可描述顆粒物濃度)

- nslookup 得到任意人的最新公開 tweet/微博。有巨大的 bug,win 下gbk only, bind9 utils的 dig/host/nslookup 有奇葩亂碼!

- 簡單的 port knocking

- 能看 AS 和 geoip 的 mtr


寫了一個輕量級的伺服器框架,本意是用來在 Android 上做借口開發和測試的。
https://github.com/5A59/MockNet


內網代理

大二期間在宿舍鼓搗虛擬機玩,學校使用的是網通寬頻,需要《銳捷客戶端》才能聯

網。奈何這軟體里有一個功能,就是會自動關閉電腦的「虛擬網卡」,導致我們虛擬機中通

過NAT轉發形式的系統找不到網卡。

於是我在虛擬機(win7)下開啟了一「代理」服務,監聽一個埠,在虛擬機中使用代理

客戶端。然後設置虛擬機的連接方式為「橋接」,這樣就可以上網了。

兩年前寫了篇博客,記錄了在linux宿主機下,通過虛擬一個windows系統來運行銳捷

客戶端,然後開啟一個代理伺服器,使得linux宿主機成功聯網的故事

詳情請看博客: 在 linux 下使用虛擬機橋接上網

為了防止有人問我為何不直接使用 wine?

提前回答:試過,無法成功。


做過httpserver和client.....trunk沒做....後來用現成的輪子做了ssl....跑起來還算湊合


給 @別處理 同學的五子棋加了楊坤對戰(某大作業


一個帶聊天室也支持私聊的 TCP IM 伺服器,但是答應幫我寫安卓客戶端的同學跑路了~~~


FTP伺服器, XFTP 做客戶端, 用wireshark 抓包, 實現相關的命令

HTTP下載工具, 模仿wget樣子

都是學校寫的練手玩


為了工程實踐,用了點繞彎的做法,強行將多對多聊天室限制成了1對1(然而整個作業的有趣之處大部分都在用electron實現客戶端界面)


這學期修了計算機網路這門課,做了幾個課設,讓我覺得比較好玩的是FTP客戶端,沒有選擇用已經封裝好的庫,而是用socket去造輪子的,嗯⊙?⊙造輪子的過程挺好玩的。


推薦閱讀:

Linux中本機和本機Socket通信會走網卡嗎?

TAG:Python | 編程 | Socket | Linux開發 | 網路編程 |