【问题标题】:How to properly perform host or dig command in python如何在 python 中正确执行 host 或 dig 命令
【发布时间】:2014-06-23 04:46:51
【问题描述】:

我想使用 python 处理 host 或 dig 命令来检查域是否被列入黑名单。我用这些

surbl_result = os.system(host_str + ".multi.surbl.org")
#this works like performing a terminal command which is host johnnydeppsource.com.multi.surbl.org

返回一个整数0(表示被列入黑名单)或256(未列入)的响应

if surbl_result == 0: #blacklisted in surbl
    black_list = True

但有时,主机命令失败并给出服务失败响应

Host johnnydeppsource.com.multi.surbl.org not found: 2(SERVFAIL)

这将返回一个零值,允许它添加新域,即使它被列入黑名单。还有其他方法可以执行这种事情吗?这包含在我的 django 1.6 应用程序中。任何线索都会有所帮助..

【问题讨论】:

  • 你应该使用subprocess。这可能不能完全解决您的问题,但您可以看到 os.system() 不是调用系统命令的方法。
  • 感谢@msvalkon 的回复。不幸的是,我也使用了它,但它仍然有响应问题。所以我将它恢复到 os.system 因为它适用于 surbl 和 spamhaus 黑名单

标签: python django ubuntu network-programming blacklist


【解决方案1】:

os.system(command) 在子shell中执行命令(字符串)后返回exit_status。

最好按以下方式使用:

from subprocess import Popen, PIPE
subproc = Popen(host_str + ".multi.surbl.org", stdout=PIPE, shell=True)
output, errorCode = subproc.communicate()
if errorCode == None:
    black_list = True

【讨论】:

  • 感谢 kvivek.. 即使响应有 servfail,它仍然会在错误代码上返回 None .. 但这使我能够打印输出.. 谢谢!
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2011-10-04
  • 2015-05-18
  • 2022-07-26
  • 1970-01-01
相关资源
最近更新 更多