Code center > Darwinbots Program Source Code
Use http get and set requests instead of ftp
theblaze:
Alright. Yeah, certbot is mainly for the simple configurations. I use caddyserver.com to automatically get certs and renew them
theblaze:
Alright, not the best solution, but this should be temporary. You're gonna need https://www.cygwin.com/ with python3 and python3 requests, then go to the /cygdrive/c/.../Darwinbots/IM/outgoing in cygwin terminal, and
--- Code: ---while :; do for bot in $(ls *dbo | shuf | head -n1); do curl -T$bot https://dbim.theblazehen.com/anythinggoes && rm $bot; done; rm *stats; sleep 1; done
--- End code ---
Then save the following as im_incoming.py
--- Code: ---import requests
import time
import random
while True:
time.sleep(0.5)
try:
print("getting bot")
r = requests.get('https://dbim.theblazehen.com/anythinggoes')
botData = r.content
if r.ok:
with open(str(random.randrange(0,1000)) + '.dbo', 'wb') as f:
f.write(botData)
f.close()
except:
print("failed to get bot")
--- End code ---
Then cd to /cygdrive/c/Users/.../IM/incoming and
--- Code: ---python3 /cygdrive/c/path/to/im_incoming.py
--- End code ---
You can replace the anything goes with whichever world you want to connect to, so you can easily create your own. Note that per IP you need to stay within a range of -10 to +10 bots uploaded, so you'd be up to 10 quite quickly, then you get 1 point closer to 0 each minute. There needs to be a pool of 200 bots in the world before you can retrieve any, so it requires 200-10 minutes before you can receive anything back from the world.
@Numsgil will you be able to support using HTTP GET and PUT in the darwinbots client directly, or will it still use an external program with an incoming and outgoing directory?
theblaze:
--- Code: ---from pprint import pprint
import threading
import uuid
import os
from collections import defaultdict
import re
import random
import time
from flask import request
from flask import Flask
app = Flask(__name__, static_url_path='')
botPath = 'bots/'
ipBotCounts = defaultdict(int)
# We allow adjustments back to zero slowly per IP, but not fast enough to cause abuse
def background_decay_ipCount():
global ipBotCounts
while True:
time.sleep(60)
for ip in ipBotCounts:
if ipBotCounts[ip] > 0:
print("removing 1 from " + ip)
ipBotCounts[ip] -= 1
if ipBotCounts[ip] < 0:
print("adding 1 to " + ip)
ipBotCounts[ip] += 1
decay_ip_thread = threading.Thread(target=background_decay_ipCount)
decay_ip_thread.start()
@app.route('/<world>', methods=['GET', 'PUT', 'POST'])
def handleRequest(world):
pprint(ipBotCounts)
path = request.path.split('/')[1]
remoteIp = request.headers.get('X-Forwarded-For', request.remote_addr)
if not re.match(r"[a-zA-Z0-9_]", path): #Someone is doing something dodgy
return '', 400
if not os.path.isdir(botPath + path):
os.mkdir(botPath + path)
if request.method == 'PUT':
if ipBotCounts[remoteIp] >= 10:
# Sent too many bots
return '', 429
ipBotCounts[remoteIp] += 1
with open(botPath + path + '/' + str(uuid.uuid4()),'wb') as f:
f.write(request.data)
return ''
if request.method == 'GET':
if not len(os.listdir(botPath + path)) > 200: #not enough bots to give one out
return '', 404
if ipBotCounts[remoteIp] <= -10:
# Sent too little bots to us
return '', 429
ipBotCounts[remoteIp] -= 1
fileToSend = random.choice(os.listdir(botPath + path))
fileToSend = botPath + path + '/' + fileToSend
filedata = open(fileToSend, 'rb').read(100000)
os.remove(fileToSend)
return filedata
app.run(host='0.0.0.0', port=80, threaded=True)
--- End code ---
Current server side code
Numsgil:
--- Quote from: theblaze on July 23, 2017, 02:44:00 PM ---@Numsgil will you be able to support using HTTP GET and PUT in the darwinbots client directly, or will it still use an external program with an incoming and outgoing directory?
--- End quote ---
Although Visual Basic 6 is supposed to support http libraries, in practice we've had better success with external programs that read and write the files, with the DB2 app just reading and writing files.
...
For the server code, can you explain which abuses you're trying to protect against?
theblaze:
--- Quote ---For the server code, can you explain which abuses you're trying to protect against?
--- End quote ---
Someone flooding the sim with one of their bots, or grabbing all the bots available in the pool. It tries to keep a balance between bots in / out for each client
Navigation
[0] Message Index
[*] Previous page
Go to full version