Python 从原始输入中提取ip地址

Python 从原始输入中提取ip地址,python,Python,我用Python2.6.5编译了一个脚本,该脚本只是为了自动化我最常用的nmap函数,并将输出记录到桌面上的txt文件中。 我还没有写这一切,因为我仍然只是学习python。我找到了一个更新回溯的更新脚本,并将其用作缩进和命令的模板,并对其进行了修改,添加了一些我自己的东西,以满足我的需要 我遇到的问题是这个街区 def nmap_target(): try: ip = raw_input(" [>] Enter ip to scan: ") except Keybo

我用Python2.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"
其背后的思想是,它要求用户在raw_input()中输入一个ip地址,并将其称为ip,然后我尝试使用subprocess.Popen将其传递给nmap(“如上面所示的nmap ip”)。 问题是它只是写nmap ip,而不是打印ip地址,然后返回错误,它甚至试图扫描出我的网络,每次我测试它,我确保互联网电缆从我的路由器拔下,这会导致我的互联网测试错误,所以如果你试着运行下面的代码,你可能需要散列出互联网_如果您已将internet从路由器上拔下,请选中菜单_main()部分中的()选项

我已经花了4天的时间在这上面了,这让我抓狂,起初我认为我需要将数字转换成浮点,所以我尝试了,但仍然是一样的,我尝试了各种各样的事情,花了数小时在互联网上搜寻答案,但都没有结果

我现在确信,这不是我要责备的命令,我想这是exit语句,我已经尝试将“print ip”放在“print”[>]这一行的后面,尝试进行目标扫描。\n“而且确实输入的ip地址显示在屏幕上,这向我证明了原始输入()一旦我把它移动到任何地方,它就失败了,这对我来说,这一定是退出声明的问题,或者是缩进,我不确定。 我还尝试过散列键盘中断以及下面的几行代码,我尝试过移动try:if语句,甚至尝试过其他命令,但都不起作用

我认为ip被输入到原始输入()中,然后保存ip地址的文件ip被销毁,然后才能将其传递到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类型,尽管如此,第一个示例应该可以工作


干杯!

您需要正确设置字符串格式,否则字符串
ip
将根本不会被解释,也就是说,它不会被实际ip替换。请尝试以下操作:

cmd = "nmap ${0} >> [....] root/Desktop/Target.txt".format(ip)
if subprocess.Popen(cmd):
您还可以使用
%
运算符:

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

非常感谢,你的传奇人物“nmap”+str(ip)+工作得很有魅力。谢谢你们两位的帮助,没有你是不可能做到的。没问题@Vaughn!很高兴能帮忙。