我在 python 2.6.5 中编译了一个脚本,该脚本只是为了自动化我最常用的 nmap 功能并将输出记录到桌面上的 txt 文件中。 我还没有自己写这些,因为我还只是在学习 python。我找到了一个用于更新回溯的更新脚本,并将其用作缩进和命令的模板,并对其进行了修改并添加了一些我自己的东西来满足我的需要。
我遇到的问题是这个 block
def nmap_target():
try: ip = raw_input(" [>] Enter ip to scan: ")
except KeyboardInterrupt:
print "\n [>] Exiting!\n"
sleep(1)
sys.exit()
print " [>] Attempting targeted scan.\n"
#print ip
if subprocess.Popen("nmap ip >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt",shell=True).wait() == 0:
print "\n"
print " [>] Targeted scan completed successfully!\n"
menu_main()
else:
print "\n"
print " [>] Nmap scan failed.\n"
其背后的想法是,它要求用户在 raw_input() 中输入一个 ip 地址并将其称为 ip,然后我尝试使用 subprocess.Popen("nmap ip 如上面所示) 将其传递给 nmap 。 问题是它只是写入 nmap ip 而不是打印 IP 地址然后返回错误,它甚至尝试扫描我的网络,每次测试它时我都会确保互联网电缆已从路由器上拔下,这会导致错误不过,通过我的互联网测试,如果您尝试运行下面的代码,如果您的互联网已从路由器上拔下,您可能需要在 menu_main() 部分中讨论 internet_check() 选项
我现在已经花了 4 天在这上面,它让我发疯,起初我以为我需要将数字转换为 float ,所以我尝试了,但仍然一样,我尝试了各种各样的事情并花了几个小时在互联网上搜寻答案无济于事。
我现在确信这不是我正在尝试的命令,我认为这是退出语句,我尝试将“print ip”放在“print”行之后 [>] 尝试目标扫描。\n”,果然输入的 IP 地址显示在屏幕上,这向我证明 raw_input() 正在工作。一旦我将其移动到失败的任何位置,这表明我必须这样做要么是退出语句的问题,要么是缩进的问题,但我不确定。 我还尝试过散列键盘中断以及下面的几行,我尝试移动 try: 和 if 语句,甚至尝试其他命令,但它只是行不通 aaaarrrrrgggghhhhhh
我是否正确地认为IP被输入到raw_input()中,然后在我可以将其传递给subprocess.Popen("nmap ip.
就像我提到的,我不是从头开始编写这个脚本的,这是我的第一个这样的项目,所以我有很多东西要学习,我已经浏览了 python 手册页并浏览了各种教程但就是无法弄清楚这一点。 任何帮助将不胜感激
如果有人感兴趣,我将发布完整的脚本,只要我能弄清楚如何正确发布代码
最佳答案
您需要将变量与字符串分开!试试这个:D
if subprocess.Popen('nmap '+ip+' >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt',shell=True).wait() == 0:
希望对你有帮助!
编辑 - 如果由于某种原因 python 将原始输入作为整数,请将其转换为字符串,如下所示:
if subprocess.Popen('nmap '+str(ip)+' >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt',shell=True).wait() == 0:
Python 不喜欢连接 str 和 int 类型,所以它会告诉我的脚本何时失败:P 我很确定你的 ip 变量将是 str 类型,所以第一个示例应该可以工作。
干杯!
关于python - 从 raw_input 中提取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633057/