怎么防止别人的程序往我监听的TCP端口发字节流

谁学逆向工程 2017-03-11 05:52:19
现在做了个局域网内的程序,一台电脑对应若干台安卓手机。手机给电脑发送的字节当然都能正常响应,因为程序是我做的。

如果别人故意或者不故意的给我的端口发送别的格式的字节流,我的TCP端口收到消息以后肯定解析错误,可能导致电脑上的程序挂了。

怎么解决,有什么思路?尤其是以后如果把电脑端程序做成非局域网的,做成服务器。
...全文
648 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
没有一个服务能“防止别人给自己发信息”,除非它根本不公开。所以这个不用考虑。 既然需要公开,那么接收数据的时候,你肯定需要在服务器端会话数据结构中保存用户登陆身份信息。例如也许用户发来的第15个会话就是一个登录信息(前14个会话都是不需要登录即可访问的请求信息),这个信息处理完毕就把用户身份更新在本地会话数据结构中,也许客户端发来的第16个消息就用到这个身份信息来验证了。 因此,只要发送过登录信息,保持长连接的话,后边发来消息就根本不需要再登录了。反之,如果没有登录,那么相关的消息自然就会被服务器端作为错误信息处理。
  • 打赏
  • 举报
回复
引用 16 楼 xiaoyuanyuan2009 的回复:
[quote=引用 13 楼 hanjun0612 的回复:] 要有sign之类的签名信息
每一次发送都带有签名?[/quote] 对于长连接通讯,当然只需要在刚刚连接的时候传送登录信息。所以可以有成千上万个消息,但是只有一开始需要登录。 对于短链接,其实每一次断开、重连就等于重新开始连接,自然就是每一次都要登录信息。不过第一次登录时获得一个授权码,然后以后重连时只要给这个授权码(SessionID编号)就可以了,简单的方式就可以。仅当超时(例如超过5分钟)没有连接过之后这个编号才应该失效。
vlevle 2017-04-06
  • 打赏
  • 举报
回复
可以先讨论一下这个问题发生的概率
「已注销」 2017-04-06
  • 打赏
  • 举报
回复
给你的数据加校验就可以了
robake 2017-03-14
  • 打赏
  • 举报
回复
引用 17 楼 xiaoyuanyuan2009 的回复:
[quote=引用 12 楼 lovelj2012 的回复:] 1、安卓app,必须登录后才可以使用,避免未授权使用。 2、报文要有一定的格式(协议对外保密),接收到非正常格式的请求,直接断开连接。
1、不登陆的话,坏人可以自己弄个软件发送任意字节流 2、设计格式有什么经验,介绍一下[/quote] 建议你看看加密之类的算法,按照自己定义的协议进行通讯,不符合标准直接关闭连接
crystal_lz 2017-03-13
  • 打赏
  • 举报
回复
我记得以前写过这样一个程序 大概代码如下 sock = new Socket(TCP) sock.Connect("xxx.xxx.xxx.xxx",80); sock.Send( "POST / HTTP/1.0 Content-Legth:10000000 ... "); for(int i = 0; i < 10000000;i++){ sock.Send(Random.NextByte); Thread.Sleep(1000); }; 如果对方是一个普通的机器或者vps windows+apache的某个版本 估计一千个这样的连接 就能让对方的web挂掉 具体什么问题我没有细看过 估计是默认配置的问题 从数据格式上来说 我完全按照了http的协议来 并且告诉对方 我要POST过来的数据很大 但是我却一个字节一个字节慢慢的发送过去 把他的连接占用着 所以按照你上面说的别人可能 逆向出你的程序来 既然这样那么他可以完全复现你的程序 他完全可以按照你的规则来 所以说校验什么的并不能根本的解决 还得靠你自己来对付这种恶意行为 自己决定来怎么处理 比如像上面的既然你协议里面用Content-Length这一条 那么我就给你设置一个很大的值过来 那么你就得给我等着我把数据发送完毕 遇到这种那么你给我断了 要么就默默的等着我把数据发完 这个时候就需要看你自己怎么想了
正怒月神 2017-03-13
  • 打赏
  • 举报
回复
引用 16 楼 xiaoyuanyuan2009 的回复:
[quote=引用 13 楼 hanjun0612 的回复:] 要有sign之类的签名信息
每一次发送都带有签名?[/quote] 当然每次都要带
江南小鱼 2017-03-13
  • 打赏
  • 举报
回复
引用 17 楼 xiaoyuanyuan2009 的回复:
[quote=引用 12 楼 lovelj2012 的回复:] 1、安卓app,必须登录后才可以使用,避免未授权使用。 2、报文要有一定的格式(协议对外保密),接收到非正常格式的请求,直接断开连接。
1、不登陆的话,坏人可以自己弄个软件发送任意字节流 2、设计格式有什么经验,介绍一下[/quote] 做数字签名,防止篡改、假冒。
谁学逆向工程 2017-03-13
  • 打赏
  • 举报
回复
引用 12 楼 lovelj2012 的回复:
1、安卓app,必须登录后才可以使用,避免未授权使用。 2、报文要有一定的格式(协议对外保密),接收到非正常格式的请求,直接断开连接。
1、不登陆的话,坏人可以自己弄个软件发送任意字节流 2、设计格式有什么经验,介绍一下
谁学逆向工程 2017-03-13
  • 打赏
  • 举报
回复
引用 13 楼 hanjun0612 的回复:
要有sign之类的签名信息
每一次发送都带有签名?
谁学逆向工程 2017-03-13
  • 打赏
  • 举报
回复
引用 14 楼 diaodiaop 的回复:
在报文里面 随意弄点时间戳不就行了..到时候解析的时候 如果不合法就不用了嘛
时间戳是什么思路,加时间是怎么分辨发送者的
by_封爱 版主 2017-03-13
  • 打赏
  • 举报
回复
在报文里面 随意弄点时间戳不就行了..到时候解析的时候 如果不合法就不用了嘛
正怒月神 2017-03-13
  • 打赏
  • 举报
回复
要有sign之类的签名信息
绿领巾童鞋 2017-03-13
  • 打赏
  • 举报
回复
解析逻辑,try catch 一下就可以了
江南小鱼 2017-03-12
  • 打赏
  • 举报
回复
1、安卓app,必须登录后才可以使用,避免未授权使用。 2、报文要有一定的格式(协议对外保密),接收到非正常格式的请求,直接断开连接。
谁学逆向工程 2017-03-12
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
引用 7 楼 larry_wen 的回复:
引用 9 楼 hdt 的回复:
引用 8 楼 wanghui0380 的回复:
看来要想识别是自己的数据包,肯定要编个字节流格式了,有什么经验可以借鉴一下,怎么编格式比较好,要不要连用户名和密码也一起放在字节流里发送。
  • 打赏
  • 举报
回复
防止别人发送数据给你,唯一的做法就是不公开。就算是谷歌、百度、腾讯的服务器,它也是会收到别人发送的无关数据的。 如果自己程序挂了,那显然是自己的服务端质量问题。
真相重于对错 2017-03-11
  • 打赏
  • 举报
回复
加密发送,你听到了也让你听不懂
wanghui0380 2017-03-11
  • 打赏
  • 举报
回复
协议都是有包头的逻辑和校验的,他是个单链状态机 只有在检查到包头的情况你才会去解析数据,同时数据逻辑和校验是复合你设定的逻辑,解析错误的数据会被抛弃,同时你也可以做一些惩罚动作(假设单位时间内,有N个包都是错误数据,就禁止accept这个地址的sokect 20分钟,如果这样还是不能让他收敛,他就直接入黑名单)
larry_wen 2017-03-11
  • 打赏
  • 举报
回复
没有预定的格式,你是不会去解析和理会的,除非别人知道你的格式,那就是你自己的问题了
加载更多回复(6)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧