简化一下,假设我想编写一些代码分析工具,它告诉我哪些文件--类/模块--是/有某种网络接口(S)。不管是REST控制器、DB连接、RPC还是简单的套接字。
我想自动完成这个任务。我这么说是什么意思?我不想使用任何regex的东西来搜索特定于网络的关键字,比如GET、POST、其他http操作、URL、IP地址和其他与某些协议相关的内容。我想要获得if类使用一些套接字操作下的遮罩。即使它的应用程序建立在http框架上,而且所有的网络操作都隐藏在更深的依赖性中。
我们有一些REST控制器,它监听特定的URL。如果使用HTTP框架,则可能会将控制器注入到其他类的依赖项中,将该类注入到其他类中,最后在底层网络接口上使用网络套接字进行监听。我假设每个编程环境都有一些原子套接字抽象,或者说是由每个网络接口使用的一对这样的抽象。
我如何才能适当地满足这些要求?目标是指出系统的网络输入和输出所在的位置。我是否可以使用仅用一种编程语言编写的工具来实现这一目标,还是必须编写每种技术的单个工具?
PS。Post一般与语言无关,但是在java或python中的一些例子会有帮助。
发布于 2020-05-24 05:51:23
这是不可能的。
以PHP为例。如果我使用mod_php
模块在Apache上运行这个PHP,就会有一个从应用程序代码直接链接到Apache中的套接字处理代码的路径。
如果我使用CGI在Apache上运行完全相同的PHP webapp,那么webapp将在一个单独的进程中运行。
唯一的区别是Apache配置文件中的一行。
从webapp的源代码中无法确定,因为在这两种情况下,源代码都是完全相同的。(正如PHP解释器的源代码和Apache的源代码一样。)
您不能通过对源代码的分析来确定这一点,因为它是环境的属性,而不是源代码。
因为静态分析是运行时环境的属性,所以不能用静态分析来确定这一点。
https://softwareengineering.stackexchange.com/questions/410542
复制相似问题