进程如何执行网络代码

时间:2010-08-14 06:22:53

标签: c networking operating-system

我是网络的初学者,我有一些关于网络的问题。 1)进程如何执行从网络上的其他计算机发送的代码。通常,进程的代码段一旦加载就无法更改以确保保护。 (我也可以执行一些任意代码来破坏进程的内存) 2)一个进程还能听到多个端口吗?多个进程可以听到同一个端口吗?例如,两个与端口80关联的https。如何区分流程以及如何确保保护? 3)另外我想知道如何在套接字中实现listen。它们是作为软件中断实现的吗?

非常感谢任何好的书籍推荐。

谢谢&的问候,

mouseY的。

2 个答案:

答案 0 :(得分:2)

问:流程如何执行从另一台机器发送的代码? 答:一般来说,这是一个坏主意,因为很难充分探索安全问题。但是,这可以通过将网络传送的代码保存到单独的可执行文件然后启动此新程序来完成。这也可以通过将接收到的原始字节视为代码来在大多数系统上完成;将字节加载到堆(而不是堆栈!)中,将地址转换为函数指针,然后调用它。尽管如此,这几乎肯定是糟糕的主意

问:一个进程可以同时监听多个端口吗? 答:是的。顺便说一句,HTTPS是端口443.HTTP是端口80。

问:多个进程可以在同一个端口上侦听(使用相同的协议,在同一地址上)吗? 答:不可以。其他进程可能会窃听并收到数据包,但它们并不直接绑定到端口。通常,只有一个进程可以绑定到给定的协议/端口/地址3元组。

问:在实现套接字监听时如何阻塞?
答:通过操作系统,以自己的方式。通常,当线程在非就绪套接字上调用acceptreadpoll / select时,它将进入“阻塞”状态,并且不会接收CPU一些数据到达的时间。

答案 1 :(得分:1)

  

1)进程如何执行从网络上的其他计算机发送的代码。通常,进程的代码段一旦加载就无法更改以确保保护。

这与网络无关。一旦通过套接字接收数据,它就在您的本地内存中。之后你做的是特定于操作系统的。例如,在Windows上,您可以使用VirtualProtect将页面标记为可执行文件。

  

2)进程也能听到多个端口吗?

当然,只需为要收听的每个端口创建一个不同的套接字。当然,要同时使用它们,您需要使用非阻塞套接字或在单独的线程中运行每个套接字。

  

3)另外我想知道如何在套接字中实现listen。它们是作为软件中断实现的吗?

这完全是针对特定操作系统的。 listen只是设置套接字以便它可以接受连接。在此之后到达的任何连接请求(这可能发生在TCP / IP驱动程序中的某处)都由OS放入队列中。稍后调用accept时,操作系统会从此队列中取出第一个挂起的连接,并返回一个套接字。