如何将应用程序附加到原始IP和TCP层

时间:2019-03-03 16:45:17

标签: python c tcp

您知道,数据包可以这样描述:

packet = ip_header + tcp_header + user_data

我们已经知道OSI层是这样的:

Physical layer
Data Link
Network (IP header)
Transport (TPC header)
Application 

我已经有了IP标头和TCP标头的代码。 我可以为EMAIL应用程序或FTP应用程序创建任何代码。 但是问题是: 如何将应用程序的代码与网络标头接口? 所以现在假设“ s”是我已经创建的原始套接字。

现在我想我必须发送它。在Python中会是这样:

s.sendto(packet, (dest_ip , 0 ))

,并且该数据包为:

packet = ip_header + tcp_header + user_data

用户数据(即应用程序)可以是FTP应用程序,电子邮件应用程序,但是长度可以达到5000字节。我该如何“发送”呢?我只是不可视化它作为数据包的一部分。将整个FTP代码放在引号之间?听起来很荒谬。那是我丢失的链接。

(这里是问题。我如何将其连接到我创建的原始头并运行所有内容?是的,我希望它在原始套接字上工作

谢谢

1 个答案:

答案 0 :(得分:1)

  

例如,我可以为EMAIL应用程序或FTP应用程序创建任何代码。但是问题是:如何将应用程序的代码与网络标头接口?所以现在假设“ s”是我已经创建的原始套接字。

不使用原始套接字。

原始套接字仅在构建pingmtrnmap之类的底层网络工具时才有用,它们特别需要与较低层进行交互网络堆栈。大多数典型的网络应用程序,例如电子邮件客户端或FTP应用程序,都不需要这样做,因此将使用TCP(流)套接字。

如果无论如何都坚持使用原始套接字,则将不得不处于必须在应用程序中重新实现IP和TCP的情况。不要这样做。