当前位置:  技术问答>linux和unix

200分请教,如何知道数据包的大小

    来源: 互联网  发布时间:2015-09-20

    本文导语:  请教各位大哥,  用tcp连接, 我如何才能知道对方发来的数据包的大小 | 不可以的,你应该定义一个数据包头,固定大小,比如 struct tcp_head{int length, int type....}; 这个包头是每个数据包都必须发...

请教各位大哥, 
用tcp连接, 我如何才能知道对方发来的数据包的大小

|
不可以的,你应该定义一个数据包头,固定大小,比如
struct tcp_head{int length, int type....};
这个包头是每个数据包都必须发的
也就是说无论从A发到B或是从B发到A,
数据包的前sizeof(tcp_head)字节都必须是这个包头
发数据之前先设置tcp_head中的数据,比如数据包长度,数据包类型...
这样,你接收的时候可以这样
recv(fd, &head, sizeof(tcp_head));
char* buffer = new char[head.length];
recv(fd, buffer, head.length);
先接收包头,确定长度后再接收剩余部份
发数据的时候也一样,把head头和你要发的数据
memcpy到了块内存中再发...

|
入侵操作系统内核的TCP协议栈,所有的TCP包都要通过那里,这样便可以捕获数据包的大小了……

但是这种东西需要和内核进行交互,似乎不是很简单就可以完成的,搞不好需要改写TCP协议栈的代码,还要重新编译内核……

如果是在Linux下面的话,可以通过netfilter完成这种东西,其他的Unix里面的话恐怕不改内核代码比较麻烦了。偷懒一点的方法是使用tcpdump的bpf设备,这样的话同样可以捕捉到数据包。具体怎么玩看tcpdump的代码就可以知道了(最偷懒的方法其实是和tcpdump交互,但是tcpdump一启动就把网卡转入了混杂模式,并不是所有的数据包你都需要来着)……

|
因为tcp的数据也是一个流

无法确定某个数据包的大小

只能先发一个固定长度的数据,表明后面数据的大小

接收的时候也是先接收固定的长度,在根据这个决定下一次接收的数据大小

    
 
 

您可能感兴趣的文章:

  • 请教/var/adm/wtmpx文件的最大大小是多少?是一个数值还是一个与文件系统的比值?是如何设置大小限制的?谢谢!!
  • 请教交换区大小配置
  • 请教,如何修改在虚拟机vmware中安装的linux的ramdisk大小?
  • 怎么改变鼠标图像的大小,请教
  • 请教:如何能获得某个文件系统的块大小
  • 请教:sed替换如何不区分大小写?
  • 如何使用gcc不对文件名大小写敏感哈,请教各路神仙~
  • 请教有关samba共享名大小写的问题
  • 请教,如何比较2个文件的修改时间的大小
  • 请教:linux下如何检测并控制进程的内存大小?
  • 我有一个3CD的REDHAT7.2,请教如果完全安装,/,/root,/user,/home怎么分配大小?
  • 请教:使用mkswap /dev/hdaX 之后可使用任意数字来规定swap分区大小
  • 请教:线程栈的大小问题
  • 新手请教高手在linux上用c写结构体时是不是有大小限制?如何解决?
  • 请教一个关于文件大小和block之间对应的问题
  • 请教关于TCP窗口大小的问题
  • 请教图片上传中的改变图片大小的问题!!急!!!
  • 请教:请问java中存放数据库中的记录,用什么数据结构?(hashtable?vector?还是别的?)
  • 请教在linux系统开发环境下,有没有db和dbf数据库引擎,如何使用这个数据库?
  • 请教高高手:如何规划和创建数据池?并使用数据池?有资料也行
  • 请教unix系统下高效数据传输的方法
  • 如何将一个jdbc数据源绑定到JNDI树上。请教!谢谢!
  • 请教:如何将SQLSERVER数据库中所有表结构导出???
  • 请教高手LINUX下读串口数据的问题!!
  • 请教jsp数据查询的分页方法?
  • 请教高手在QT下怎样收串口数据
  • 怎样把solaris系统下oracle数据导入access中??请教!!急~
  • 3分钟数据监控的设计,请教.
  • 请教:JSP中分页显示数据库内容的优化算法?
  • 请教数据库连接池的使用....
  • 请教各位大哥关于数据库编程。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3