gpt4 book ai didi

Python 开关函数

转载 作者:行者123 更新时间:2023-12-02 17:31:47 25 4
gpt4 key购买 nike

我一直在尝试使用 if 构建的简单开关函数来编写一个简单的端口扫描器。我已经在这里搜索了关于如何使开关功能像在 C++ 或类似语言中一样可用的适当解决方案。我发现这里已经讨论了这个问题 Replacements for switch statement in Python?我已经尝试了其中的一些方法,但到目前为止还没有运气让它正常运行。无论我从链接中选择什么方法,我总是会在第二个 switch case 上遇到这样的语法错误:

  File "/home/h4v0kkx0008c/Desktop/Sources/setup/PortScannerV1.py", line 44
if case(2):
^
SyntaxError: invalid syntax

这可能是什么问题?

这是我到目前为止写的完整代码:

from socket import *
import time, socket, os, sys, string, argparse, logging, math

n = raw_input("Choose Port range: \n(1)Standard Ports: 0 - 1025\n(2)Middle Range: 1025 - 5000\n(3)Higher Range: 5000 - 49151\n(4)Highest Range: 49151 - 65535\n(5)All Ports: 0 - 65535\n(6)Custom ")

class switch(object):
value = None
def __new__(class_, value):
class_.value = value
return True

def case(*args):
return any((arg == switch.value for arg in args))


while switch(n):



if case(1):
print"Your choice is: Standard Ports"
target= raw_input("Please specify Host or Ip to scan: ")
targetIP = gethostbyname(target)
print 'Starting scan on host ', targetIP
for i in range(0, 1025):
s = socket(AF_INET, SOCK_STREAM)
result = s.connect_ex((targetIP, i)


if case(2):
print"Your choice is: Middle Range"
target= raw_input("Please specify Host or Ip to scan: ")
targetIP = gethostbyname(target)
print 'Starting scan on host ', targetIP
for i in range(1025, 5000):
s = socket(AF_INET, SOCK_STREAM)
result = s.connect_ex((targetIP, i)
break

if case(3):
print"Your choice is: Higher Range"
target= raw_input("Please specify Host or Ip to scan: ")
targetIP = gethostbyname(target)
print 'Starting scan on host ', targetIP
for i in range(500, 49151):
s = socket(AF_INET, SOCK_STREAM)
result = s.connect_ex((targetIP, i)
break

if case(4):
print"Your choice is: Highest Range"
target= raw_input("Please specify Host or Ip to scan: ")
targetIP = gethostbyname(target)
print 'Starting scan on host ', targetIP
for i in range(49151, 65535):
s = socket(AF_INET, SOCK_STREAM)
result = s.connect_ex((targetIP, i)
break

if case(5):
print"Your choice is: All Ports"
target= raw_input("Please specify Host or Ip to scan: ")
targetIP = gethostbyname(target)
print 'Starting scan on host ', targetIP
for i in range(0, 65535):
s = socket(AF_INET, SOCK_STREAM)
result = s.connect_ex((targetIP, i)
break

if case(6):
print"Your choice is: Custom"
target= raw_input("Please specify Host or Ip to scan: ")
targetIP = gethostbyname(target)
print 'Starting scan on host ', targetIP
startPort= raw_input("Specify starting Port:")
endPort= raw_input("Specify end Port:")
for i in range(startPort, endPort):
s = socket(AF_INET, SOCK_STREAM)
result = s.connect_ex((targetIP, i)
break

最佳答案

您尝试解决此问题的方式似乎不是 pythonic。由于 python 中不存在 switch 语句,您可以使用字典模拟类似 switch 的行为,因为函数和类是 python 中的一流对象。

def func1():
# do some operation

def func2():
# some other operation

def default_func():
# some default action

options = {
'1': func1,
'2': func2,
'default': default_func
}

value = raw_input('enter a number')

result = options.get(int(value), options.get('default'))()

如果你的函数足够简单,你肯定可以使用lambdas作为值,这样肯定会更简洁。

关于Python 开关函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com