您知道,数据包可以这样描述:
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代码放在引号之间?听起来很荒谬。那是我丢失的链接。
(这里是问题。我如何将其连接到我创建的原始头并运行所有内容?是的,我希望它在原始套接字上工作
谢谢
答案 0 :(得分:1)
例如,我可以为EMAIL应用程序或FTP应用程序创建任何代码。但是问题是:如何将应用程序的代码与网络标头接口?所以现在假设“ s”是我已经创建的原始套接字。
不使用原始套接字。
原始套接字仅在构建ping
,mtr
或nmap
之类的底层网络工具时才有用,它们特别需要与较低层进行交互网络堆栈。大多数典型的网络应用程序,例如电子邮件客户端或FTP应用程序,都不需要这样做,因此将使用TCP(流)套接字。
如果无论如何都坚持使用原始套接字,则将不得不处于必须在应用程序中重新实现IP和TCP的情况。不要这样做。