如何讓Winsock程序只接受來自特定地址的連接請求?我想拒絕連接被完全忽略,而不是得到TCP拒絕。Winsock,只接受來自特定IP地址的請求
回答
要使Winsock程序只接受來自特定IP地址的連接,請使用WSAAccept()
的條件接受機制。首先,啓用該功能:
SOCKET sd = socket(...);
listen(sd, ...);
DWORD nTrue = 1;
setsockopt(sd, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char*)&nTrue, sizeof(nTrue));
然後,修改你的接受調用看起來像這樣:
sockaddr_in sin;
WSAAccept(sd, (sockaddr*)&sin, sizeof(sin), ConditionalAcceptChecker, 0);
ConditionalAcceptChecker
是你寫一個函數,這使得有關堆棧是否會接受還是決定拒絕連接。如果它拒絕它,遠程節點將得到一個TCP RST數據包,所以它知道它被拒絕了。
如果您希望網絡堆棧在不通知遠程對等方的情況下悄悄丟棄來自其他地址的連接嘗試,則必須在比Winsock更低的級別上執行此操作。在Vista或Windows Server 2008及以上版本,此命令將修改防火牆規則給你想要的效果:
netsh advfirewall firewall add rule name=MyProtocol dir=in remoteip=1.2.3.4
localport=1234 protocol=tcp action=allow
這是一個簡單的命令,因爲拆分對堆棧溢出格式限制。
它說的是允許IP 1.2.3.4的遠程機器連接到本機上的TCP端口1234。如果您的默認模式啓用了防火牆,並拒絕了未明確允許的流量,則所有其他機器的連接嘗試將被丟棄。
在老版本的Windows上,回到XP,有一個不同的「netsh防火牆」語法獲得相同的效果。只需在命令提示符下鍵入「netsh防火牆」以開始瀏覽其內置幫助。
如果winsock可以配置爲不拒絕,但丟棄來自不期望地址的流量 – user396829 2010-07-21 13:09:21
上面更新的答案覆蓋了防火牆級接受/拒絕控制。 – 2010-07-21 14:58:00
+1,不知道'WSAAccept'中的特徵 – Default 2010-08-12 11:45:21
- 1. 發送來自特定IP地址的SOAP請求
- 2. 來自httpheader的請求的IP地址
- 3. 套接字只接受特定地址?
- 4. 如何限制Apache只接受來自本地主機的特定url請求?
- 5. 如何只接受來自XML配置文件中指定IP地址的服務器的請求
- 6. 來自特定IP的API請求
- 7. 將ASP.NET應用程序配置爲始終接受來自特定IP地址的GET請求?
- 8. 只接受來自本地主機的獲取/發佈請求
- 9. 阻止請求特定網址的IP地址
- 10. 來自特定IP - 請求庫的API GET請求 - Python
- 11. 如何獲取請求來自的服務器的IP地址?
- 12. 在接受套接字連接之前很熱得到請求的IP地址?
- 13. 來自Rails請求頭的客戶端IP地址
- 14. Google Vision API來自IP地址的請求被阻止
- 15. 僅接受來自特定IP的套接字
- 16. 來自特定IP地址的特殊許多匹配
- 17. Django:只接受來自我的應用程序的請求
- 18. 對特定bean的Incept接受請求
- 19. 接受SQL服務器中來自aLL IP的遠程TCP/IP請求
- 20. 如何使用HttpClient從特定IP地址發送請求? C#
- 21. 只接受來自已認證用戶的某些ajax請求
- 22. 使IPython Notebook只接受來自給定地址/子網的連接
- 23. 的Winsock無法連接到本地IP地址
- 24. 只接受來自特定子網的連接
- 25. 如何發送來自IPv6地址的請求具有dula IP的IP地址(即IPV4和IPv6)
- 26. 欺騙HTTP請求的源IP地址
- 27. 什麼IP地址不接受退貨
- 28. 僅允許來自指定IP地址的傳入連接
- 29. jNetPcap數據包丟棄,如果來自特定IP地址
- 30. mongoDB只允許來自特定IP的連接嗎?
問你是否可以將winsock配置爲拒絕來自不受歡迎地址的流量,或者如何編寫使用winsock拒絕來自不期望地址的流量的軟件? – Avalanchis 2010-07-20 13:47:14