Recent Posts

Pages: [1] 2 3 ... 10
1
Off Topic / Table of Slightly Wrong Equations and Identities
« Last post by theblaze on August 14, 2017, 10:23:10 AM »
2
Bugs and fixes / Re: poison and venom not working
« Last post by LawrenceFlores on August 07, 2017, 12:10:35 PM »
Looks like it is fixpos for Hulk. Kinda reminds me of the crazy bulk site our little completely broken vegy system.

It seems to be working fine now for me anyway.

Yep, works perfectly for a long time now.
3
Quote
For the server code, can you explain which abuses you're trying to protect against?

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
4
Darwinbots Program Source Code / Re: Use http get and set requests instead of ftp
« Last post by Numsgil on July 30, 2017, 09:56:04 AM »
@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?

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?
5
Code: [Select]
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)

Current server side code
6
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: [Select]
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
Then save the following as im_incoming.py
Code: [Select]
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")

Then cd to /cygdrive/c/Users/.../IM/incoming and
Code: [Select]
python3 /cygdrive/c/path/to/im_incoming.py
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?
7
Alright. Yeah, certbot is mainly for the simple configurations. I use caddyserver.com to automatically get certs and renew them
8
Darwinbots Program Source Code / Re: Use http get and set requests instead of ftp
« Last post by Numsgil on July 23, 2017, 12:28:25 PM »
I got the https certificates but certbot is having a hard time installing them in to apache.  We have a lot of virtual hosts that are Include'd from other files, and I think that's confusing it.  I'll need to manually add the certificates to all the virtual host files.  Sometime in the next few days hopefully.
9
Woot, got it running. Will make it publicly available in 2-3 hours
10
Quote
two people download a file at once or getting your own bot back.

So I'm thinking for each world (better word than environment in previous reply), each client needs to stay within +10 and -10 bots (client identified by IP, not that hard to beat the restriction, but if someone wants to they'll find a way) to prevent taking all / flooding the IM with their own bots, then we keep a pool of say 100 bots on the server. If a client requests to GET a bot and they're within their limit and we have 100+ bots on the server then we choose a random bot, send it to them, and delete it from the server. Won't guarantee that you won't get the same bot right back, but you'll have a good chance it isn't the same you sent out.
Pages: [1] 2 3 ... 10