格的空白位置右击鼠标,d出快捷菜单,选择“创建 IP 安全策略”(如右图),于是d出一个向导。在向导中点击“下一步”按钮,为新的安全策略命名;再按“下一步”,则显示“安全通信请求”画面,在画面上把“激活默认相应规则”左边的钩去掉,点击“完成”按钮就创建了一个新的IP 安全策略。
第二步,右击该IP安全策略,在“属性”对话框中,把“使用添加向导”左边的钩去掉,然后单击“添加”按钮添加新的规则,随后d出“新规则属性”对话框,在画面上点击“添加”按钮,d出IP筛选器列表窗口;在列表中,首先把“使用添加向导”左边的钩去掉,然后再点击右边的“添加”按钮添加新的筛选器。
第三步,进入“筛选器属性”对话框,首先看到的是寻址,源地址选“任何 IP 地址”,目标地址选“我的 IP 地址”;点击“协议”选项卡,在“选择协议类型”的下拉列表中选择“TCP”,然后在“到此端口”下的文本框中输入“135”,点击“确定”按钮。这样就添加了一个屏蔽 TCP 135(RPC)端口的筛选器,它可以防止外界通过135端口连上你的电脑。点击“确定”后回到筛选器列表的对话框,可以看到已经添加了一条策略,重复以上步骤继续添加 TCP 137、139、445、593 端口和 UDP 135、139、445 端口,为它们建立相应的筛选器。 重复以上步骤添加TCP 1025、2745、3127、6129、3389 端口的屏蔽策略,建立好上述端口的筛选器,最后点击“确定”按钮。
第四步,在“新规则属性”对话框中,选择“新 IP 筛选器列表”,然后点击其左边的圆圈上加一个点,表示已经激活,最后点击“筛选器 *** 作”选项卡。在“筛选器 *** 作”选项卡中,把“使用添加向导”左边的钩去掉,点击“添加”按钮,添加“阻止” *** 作在新筛选器 *** 作属性”的“安全措施”选项卡中,选择“阻止”,然后点击“确定”按钮。
第五步、进入“新规则属性”对话框,点击“新筛选器 *** 作”,其左边的圆圈会加了一个点,表示已经激活,点击“关闭”按钮,关闭-对话框;最后回到“新IP安全策略属性”对话框,在“新的IP筛选器列表”左边打钩,按“确定”按钮关闭对话框。在“本地安全策略”窗口,用鼠标右击新添加的 IP 安全策略,然后选择“指派”。
于是重新启动后,电脑中上述网络端口就被关闭了,病毒和黑客再也不能连上这些端口,从而保护了你的电脑(按理说能封啊,哈哈,我没试过哦)
在运行命令行裏输cmd,然后输入netstat/an就可以看到端口的开放情况了关键是recvfrom返回的客户端addrClient是不能作为服务器返回客户端的地址使用的,即在sendto中不能使用由recvfrom返回得到的客户端地址。
楼主将UDP通讯和TCP通讯搞混了,不过说实话这个是很正常的。当初我学的时候没一本书是把网络通信编程写清楚地,只能靠自己摸索。
socket可以理解为通信地址,它由协议,IP和端口组成。在UDP模式中,绑定的目的是要告诉 *** 作系统,当网卡从外部接收到数据包时, *** 作系统就知道应该把这个数据包交给哪个应用程序。
具体是这样的,网卡总是知道自己的IP是什么,因此网卡接收到网线中的数据包时,会提取数据包的包头,里面含有的IP如果是网卡自己的IP,它就会把该数据包交给 *** 作系统,如果不是就将该数据包丢弃,可以认为 *** 作系统不知道有该数据包。 *** 作系统接收到数据包后,会根据每个数据包包含的端口号,将该数据包发给不同的应用程序。 *** 作系统怎么会知道哪个端口号对应哪个应用程序呢?这个就是要求应用程序使用bind函数,将自己的端口号告诉 *** 作系统。因此,所谓的端口冲突就是指其他应用程序已经通过bind告诉了 *** 作系统该端口被它使用了,因此另外的应用程序就不能使用该端口了,即bind肯定失败!
所以,bind肯定是由接受数据包的应用程序使用的,这样的应用程序就是服务器应用程序,也可以看到我们需要为bind提供IP和端口号。并且,当初我还在疑惑为什么会有一个INADDR_ANY的IP指定,似乎bind根本不需要IP啊,只要端口就可以了。仔细一想才明白,因为一台主机可能会有2个网卡。因此,主机可能会有两个IP,这样bind这个函数允许我们自由指定需要绑定到哪块网卡上的特定端口。也可以不指定,通过INADDR_ANY由 *** 作系统为我们指定。譬如,13端口在第一块网卡中被占用了,我们就可以使用bind明确指定自己的应用程序接收来自第二块网卡13端口的数据包。
UDP编程中作为客户端发送数据时,是不需要指定自己的IP和端口的,因此无需使用bind绑定,直接在sendto指定服务器的IP和端口就可以了。但实际上发送数据时, *** 作系统还是需要使用客户端机器上的一个IP和端口号的,这个IP和端口号由 *** 作系统指派,譬如在 *** 作系统处理sendto时,它可以指派1005端口给UDP客户端,此时如果有另一个客户程序再使用bind注册该端口,就会失败了。但实际情况大家都知道,UDP数据包的发送是相当快的,这种冲突几乎不存在,因为数据包发送后,即数据包通过网卡发到了网线中, *** 作系统就认为发送成功了,该端口就会被 *** 作系统收回,标记“未使用”。
总结一下,UDP服务器需要占用一个IP和一个端口号,且是固定的,是在调用了bind函数成功后便确定下来了。UDP客户端也需要使用一个IP和一个端口号,它们都是随机的,这次发送可能是第一块网卡,第二次可能是第二块网卡,端口也如此。发送后,该端口就被 *** 作系统收回,因此客户端无法使用该端口接收来自服务器的数据包。
因此不能使用recvfrom的客户端的端口信息再调用sendto发送给客户端,因为客户端的电脑 *** 作系统根本不会讲该数据包交给客户端应用程序。
以上用比较容易理解的概念介绍了下,其实精确说的话,很多事情不是 *** 作系统做的,而是各种驱动程序完成的。具体怎么修改代码,楼主应该明白了吧,光改服务器端的代码,没用,客户端的代码也要改。这也是为什么UDP是不存在服务器,客户端之说的原因,因为任何一方给另一方发数据包,前提必须使另一方已经通过bind绑定了一个固定端口了。
打开控制面板
找到windows 防火墙,并打开
点击窗口左侧的高级设置链接
d出一个高级安全Windows防火墙的窗口
点击左边选中出站规则
在最右边的窗口 *** 作下面点击新建规则
在新建出站规则向导上-选择端口-下一步
选择UDP-特定远程端口-输入8000
下一界面上选择阻止连接
选中域、专用、公用-下一步
输入一个名称和一个描述
一般windows默认开启的UDP 135、137、138、445 端口,此外还有DNS:域名解析服务。因特网上的每一台计算机都有一个网络地址与之对应,这个地址就是我们常说的IP地址,它以纯数字的形式表示。然而这却不便记忆,于是出现了域名。访问主机的时候只需要知道域名,域名和IP地址之间的变换由DNS服务器来完成。DNS用的是53端口。
snmp:简单网络管理协议,使用161端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
聊天软件Oicq:Oicq的程序既接受服务,又提供服务,这样两个聊天的人才是平等的。oicq用的是无连接的协议,其服务器使用8000端口,侦听是否有信息到来;客户端使用4000端口,向外发送信息。如果上述两个端口正在使用(有很多人同时和几个好友聊天),就顺序往上加。
一般也就这几个,如果你那个有下载软件 特别是电驴啊这些,会有别的UDP端口
还有PPS也会用到不同的端口 这个和应用软件有关
关闭UDP端口 推荐使用防火墙设置~
或者控制面板 - 管理工具 - 本地安全策略也可以设置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)