从raw_input中提取ip地址

时间:2012-11-29 19:17:57

标签: python

我已经在python 2.6.5中编译了一个脚本,该脚本只是自动化我最常用的nmap函数,并将输出记录到桌面上的txt文件中。 我自己并没有写这些,因为我还在学习python。我发现了一个用于更新回溯的更新脚本,并将其用作缩进和命令的模板并对其进行修改并添加了一些我自己的东西来给我我需要的东西。

我遇到的问题是这个块

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"

它背后的想法是它要求用户输入一个ip地址到raw_input()并调用它ip,我试图然后使用subprocess.Popen(“nmap ip”将其传递给nmap,如上所示。 问题是它只是写nmap ip而不是打印ip地址然后返回错误,它甚至尝试扫描出我的网络,每次我测试它我确保从我的路由器拔掉互联网电缆,这会导致一个错误虽然我的互联网测试,所以如果你尝试运行下面的代码,你可能需要在menu_main()部分散列出internet_check()选项,如果你从路由器拔掉你的互联网

我现在已经花了4天时间让它疯了,起初我以为我需要将数字转换为浮点数所以我试过这个并且仍然是相同的,我已经尝试了各种各样的事情并花了几个小时在网上搜寻寻找无济于事的答案。

我现在确信它不是我正在尝试的命令,这是责备我认为这是退出声明,我已经尝试将“print ip”放在“打印”[>]尝试的行之后目标扫描。\ n“并确定输入的IP地址显示在屏幕上,这证明raw_input()正在工作。一旦我将它移动到它失败的任何地方,这表明它对我来说必须是退出语句的问题或者缩进,我不确定。 我也尝试过敲击键盘中断以及下面几行,我试着移动try:如果语句周围甚至尝试了其他命令但它只是不会工作aaaarrrrrgggghhhhhh

我是否正确认为ip正在输入raw_input()然后在我将其传递给subprocess.Popen(“nmap ip。”之前,正在创建保存ip地址的文件ip。 / p>

就像我提到的那样,我没有从头开始编写这个脚本,这是我的第一个这样的项目,所以我有很多需要学习的东西,我已经通过python手册页看了各种各样的教程但只是想不出来。 任何帮助将不胜感激

如果有人有兴趣,我会发布完整的脚本,只要我能弄清楚如何正确发布代码

2 个答案:

答案 0 :(得分:1)

你需要从字符串中分离变量!试试这个: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类型,所以第一个例子应该可以工作。

干杯!

答案 1 :(得分:1)

您需要正确格式化字符串,否则根本不会解释字符串ip,即它不会被实际IP替换。尝试类似:

cmd = "nmap ${0} >> [....] root/Desktop/Target.txt".format(ip)
if subprocess.Popen(cmd):

您也可以使用%运算符:

cmd = "nmap %s >> [....] root/Desktop/Target.txt" % ip