从TCP/IP流量中构建文件?

3
所以,对于一个计算机科学项目,我需要嗅探网络流并从该流中构建文件。例如,如果程序指向~/dumps/tmp/,则目录结构应如下所示:
~/dumps/tmp /192.168.0.1/ page1.html page2.html [各种页面资源] downloaded file1 /192.168.0.2/ 以此类推。
我在Linux上使用C和pcap进行操作(因为我已经知道C++,而且认为这将是一个很好的学习经验)。
到目前为止,我一直在查看TCP/IP的各种头格式。 TCP header 我想,我可以通过它们的dst/src对数据包进行排序,然后按序列和确认窗口正确排序。
但这让我面临着一个大问题:如何确定数据包A-Z属于HTML文件,而a-z属于正在下载的其他随机文件?
还有,我应该查找哪些其他类型的头格式?目前,我有:

我会贴更多超链接图片,但显然需要声望才能这样做,抱歉 TCP、Ethernet、UDP,我会涉及到诸如FTP之类的协议(但我相当确定FTP是建立在TCP之上的,就像HTTP一样)。

所以,简而言之,我该如何在网络流中查找文件,我是否漏掉了任何重要的协议需要阅读?

回复 我不知道如何回复,所以只能这样做。

我已经多次使用pcap,并将在此项目中再次使用它,但我不会使用Wireshark的任何东西(尽管它是一个很棒的程序),因为我想真正学习这种东西。

是的,我会研究OSI层,有哪些常见协议的好网站建议吗?

我想我应该停下来了,在这个“问题”变成讨论之前。

4个回答

5

文件的起始和结束位置并不在TCP协议中,你需要处理通过TCP传输的协议。例如,在HTTP协议中,你需要读取HTTP头中的Content-Length头部信息,该信息应该等于HTTP正文(完整的HTML页面)的长度。然后,你需要累积1个或多个TCP数据包的正文,直到你拥有由Content-Length头部信息指示的总内容。


2

由于这是一项学校任务,您可能受到使用工具的限制,但您可能需要了解Wireshark。如果我将此任务作为真实项目,则会使用Wireshark并研究如何使用其流提取和协议解析功能,并仅在其周围包装一些内容以自动化它们并获得所需结果。


是的,或者使用正确的命令行参数使用tshark。即使将tshark管道传输到grep也非常强大。但是,作为学生,你的工作是停下来闻花香。 - JasonSmith
使用Wireshark查看真实世界的流量是个好主意,这将为您提供一些很棒的见解。 - noctonura

1
你需要在混杂模式下打开一个原始套接字以访问以太网设备。然后使用libpcap来存储和分析数据包。

0

由于这是针对计算机科学学校的,我会从OSI模型开始,它可以为您提供网络协议的良好概述和逻辑结构。
文件位于第6层(MIME)和第7层(各种协议)。 然后,您需要逐个检查每个协议,并检查如何确定哪些包含文件以及如何捕获它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接