确定给定的文本是否为C代码

时间:2015-08-08 12:36:50

标签: c linux-kernel smtp firewall

我正在尝试构建一个Linux内核级防火墙,我需要在其中创建一个DLP(数据丢失防护)层。

我需要确定给定电子邮件(通过SMTP发送)是C代码还是纯文本。 代码不必是完整的程序,因此我将无法使用编译器完成此任务。

例如,应捕获以下代码:

if (variable == true) { printf("The statement is true\n"); }

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

如果是'声明',我会建议获得(Lex / Yacc)C解析器。将解析器置于'expecting-statement state'并运行它。如果您没有收到错误,您就知道它是有效的。

根据您获得的解析器,您可能需要删除大量代码;遇到变量时符号表查找/检查之类的事情......但是如果有(几乎)准备好使用的简单实现,我就不会感到惊讶。

您还可以下载纯C Lex和Yacc规范并在其周围编写一些代码以使其正常工作;这并不困难。但它确实需要付出很大的努力来解决它。

答案 1 :(得分:0)

对于更通用的代码与文字分类,您还可以尝试以下任何一项:

  • 训练马尔可夫模型(例如使用CRM114 - http://crm114.sourceforge.net/
  • 字母三元组分析
  • 简单字母频率分析(括号中的高百分比,花括号,操作符可以表示代码)