1
This commit is contained in:
Evan Pratten 2019-07-01 22:38:27 -04:00
parent 4d73b8c586
commit c9b53149be
5 changed files with 253 additions and 42 deletions

View File

@ -0,0 +1,38 @@
---
layout: post
title: "devDNS"
description: "The DNS over devRant service"
date: 2019-07-01 22:13:00
categories: projects
---
Over the past year and a half, I have been hacking my way around the undocumented [devRant](https://devrant.com) auth/write API. At the request of devRant's creators, this API must not be documented due to the way logins work on the platform. That is besides the point. I have been working on a little project called [devDNS](https://devrant.com/collabs/2163502) over the past few days that uses this undocumented API. Why must I be so bad at writing intros?
## What is devDNS
devDNS is a devRant bot written in python. It will serve any valid DNS query from any user on the platform. A query is just a comment in one of the following forms:
```
@devDNS example.com
```
or
```
@devDNS MX example.com
```
Of course, `MX` and `example.com` are to be replaced with the domain and entry of your choosing.
devDNS was inspired by [@1111Resolver](https://twitter.com/1111resolver), and the source is available on [GitHub](https://github.com/Ewpratten/devDNS).
## How it works
The Python script behind devDNS is very simple. devDNS does the following every 10 seconds:
- Fetch all new notifs
- Find only mentions
- Spin off a thread for each mention that passes a basic parser (Is the message 2 or 3 words long)
- In the thread, check if the message is a control message (allows me to view the status of the bot via devRant)
- Check if the request matches a required pattern
- Call `dnspython` with requested record and domain
- Receive answer from a custom [PIHole](https://pi-hole.net/) server with caching and super low latency
- Send a comment with the results to the requester
Thats it! Super simple, and only two days from concept to reality.
## Where is this hosted?
This program is hosted on a raspberry pi laying in my room running docker. I also have [Portainer](https://www.portainer.io/) set up so I can easily monitor the bot from my phone over my VPN.

View File

@ -92,6 +92,13 @@
<ul>
<!-- <header class="major"> -->
<li><h3><a href="/projects/2019/07/01/devDNS.html" class="link" title="2019-07-01 18:13:00 -0400">devDNS</a></h3></li>
<!-- </header> -->
<!-- <header class="major"> -->
<li><h3><a href="/projects/2019/06/27/PWNlink.html" class="link" title="2019-06-27 13:16:00 -0400">I had some fun with a router</a></h3></li>
<!-- </header> -->

View File

@ -1,4 +1,33 @@
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.5">Jekyll</generator><link href="http://0.0.0.0:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://0.0.0.0:4000/" rel="alternate" type="text/html" /><updated>2019-06-29T16:41:32-04:00</updated><id>http://0.0.0.0:4000/feed.xml</id><title type="html">Evan Pratten</title><subtitle>Computer wizard, student, &lt;a href=&quot;https://github.com/frc5024&quot;&gt;@frc5024&lt;/a&gt; programming team lead, and radio enthusiast.</subtitle><entry><title type="html">I had some fun with a router</title><link href="http://0.0.0.0:4000/projects/2019/06/27/PWNlink.html" rel="alternate" type="text/html" title="I had some fun with a router" /><published>2019-06-27T13:16:00-04:00</published><updated>2019-06-27T13:16:00-04:00</updated><id>http://0.0.0.0:4000/projects/2019/06/27/PWNlink</id><content type="html" xml:base="http://0.0.0.0:4000/projects/2019/06/27/PWNlink.html">&lt;p&gt;I was playing around with some D-link routers today and remembered an &lt;a href=&quot;https://www.exploit-db.com/exploits/33520&quot;&gt;ExploitDB Entry&lt;/a&gt; I read a while ago. Many D-link routers have a great feature that allows remote management and configuration queries. Interestingly, this cannot be disabled, and one of the pages contains a cleartext version of the admin password (yay!).&lt;/p&gt;
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.5">Jekyll</generator><link href="http://0.0.0.0:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://0.0.0.0:4000/" rel="alternate" type="text/html" /><updated>2019-07-01T22:38:02-04:00</updated><id>http://0.0.0.0:4000/feed.xml</id><title type="html">Evan Pratten</title><subtitle>Computer wizard, student, &lt;a href=&quot;https://github.com/frc5024&quot;&gt;@frc5024&lt;/a&gt; programming team lead, and radio enthusiast.</subtitle><entry><title type="html">devDNS</title><link href="http://0.0.0.0:4000/projects/2019/07/01/devDNS.html" rel="alternate" type="text/html" title="devDNS" /><published>2019-07-01T18:13:00-04:00</published><updated>2019-07-01T18:13:00-04:00</updated><id>http://0.0.0.0:4000/projects/2019/07/01/devDNS</id><content type="html" xml:base="http://0.0.0.0:4000/projects/2019/07/01/devDNS.html">&lt;p&gt;Over the past year and a half, I have been hacking my way around the undocumented &lt;a href=&quot;https://devrant.com&quot;&gt;devRant&lt;/a&gt; auth/write API. At the request of devRants creators, this API must not be documented due to the way logins work on the platform. That is besides the point. I have been working on a little project called &lt;a href=&quot;https://devrant.com/collabs/2163502&quot;&gt;devDNS&lt;/a&gt; over the past few days that uses this undocumented API. Why must I be so bad at writing intros?&lt;/p&gt;
&lt;h2 id=&quot;what-is-devdns&quot;&gt;What is devDNS&lt;/h2&gt;
&lt;p&gt;devDNS is a devRant bot written in python. It will serve any valid DNS query from any user on the platform. A query is just a comment in one of the following forms:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@devDNS example.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@devDNS MX example.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Of course, &lt;code class=&quot;highlighter-rouge&quot;&gt;MX&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;example.com&lt;/code&gt; are to be replaced with the domain and entry of your choosing.&lt;/p&gt;
&lt;p&gt;devDNS was inspired by &lt;a href=&quot;https://twitter.com/1111resolver&quot;&gt;@1111Resolver&lt;/a&gt;, and the source is available on &lt;a href=&quot;https://github.com/Ewpratten/devDNS&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;/h2&gt;
&lt;p&gt;The Python script behind devDNS is very simple. devDNS does the following every 10 seconds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fetch all new notifs&lt;/li&gt;
&lt;li&gt;Find only mentions&lt;/li&gt;
&lt;li&gt;Spin off a thread for each mention that passes a basic parser (Is the message 2 or 3 words long)&lt;/li&gt;
&lt;li&gt;In the thread, check if the message is a control message (allows me to view the status of the bot via devRant)&lt;/li&gt;
&lt;li&gt;Check if the request matches a required pattern&lt;/li&gt;
&lt;li&gt;Call &lt;code class=&quot;highlighter-rouge&quot;&gt;dnspython&lt;/code&gt; with requested record and domain&lt;/li&gt;
&lt;li&gt;Receive answer from a custom &lt;a href=&quot;https://pi-hole.net/&quot;&gt;PIHole&lt;/a&gt; server with caching and super low latency&lt;/li&gt;
&lt;li&gt;Send a comment with the results to the requester&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thats it! Super simple, and only two days from concept to reality.&lt;/p&gt;
&lt;h2 id=&quot;where-is-this-hosted&quot;&gt;Where is this hosted?&lt;/h2&gt;
&lt;p&gt;This program is hosted on a raspberry pi laying in my room running docker. I also have &lt;a href=&quot;https://www.portainer.io/&quot;&gt;Portainer&lt;/a&gt; set up so I can easily monitor the bot from my phone over my VPN.&lt;/p&gt;</content><author><name></name></author><summary type="html">Over the past year and a half, I have been hacking my way around the undocumented devRant auth/write API. At the request of devRants creators, this API must not be documented due to the way logins work on the platform. That is besides the point. I have been working on a little project called devDNS over the past few days that uses this undocumented API. Why must I be so bad at writing intros?</summary></entry><entry><title type="html">I had some fun with a router</title><link href="http://0.0.0.0:4000/projects/2019/06/27/PWNlink.html" rel="alternate" type="text/html" title="I had some fun with a router" /><published>2019-06-27T13:16:00-04:00</published><updated>2019-06-27T13:16:00-04:00</updated><id>http://0.0.0.0:4000/projects/2019/06/27/PWNlink</id><content type="html" xml:base="http://0.0.0.0:4000/projects/2019/06/27/PWNlink.html">&lt;p&gt;I was playing around with some D-link routers today and remembered an &lt;a href=&quot;https://www.exploit-db.com/exploits/33520&quot;&gt;ExploitDB Entry&lt;/a&gt; I read a while ago. Many D-link routers have a great feature that allows remote management and configuration queries. Interestingly, this cannot be disabled, and one of the pages contains a cleartext version of the admin password (yay!).&lt;/p&gt;
&lt;h2 id=&quot;how-to-get-yourself-an-admin-password&quot;&gt;How to get yourself an admin password&lt;/h2&gt;
&lt;p&gt;On any supported router, make an HTTP request to &lt;code class=&quot;highlighter-rouge&quot;&gt;http://your.router.ip.addr/tools_admin.asp/&lt;/code&gt;. This will return a pretty large XML file containing information about your routers hardware and configuration.&lt;/p&gt;
@ -400,42 +429,4 @@ Your browser does not support audio players
&lt;h2 id=&quot;the-result&quot;&gt;The result&lt;/h2&gt;
&lt;p&gt;Here is the resulting image. From left, to right: 5024, 254, 2224, 5406, 2056&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/w2a.png&quot; alt=&quot;Thr result&quot; /&gt;&lt;/p&gt;</content><author><name></name></author><summary type="html">I was scrolling through reddit the other day, and came across this great post by u/MasterQuacks.</summary></entry><entry><title type="html">GitHubs CSS is boring. So I refreshed the design</title><link href="http://0.0.0.0:4000/projects/2019/06/12/Styiling-GitHub.html" rel="alternate" type="text/html" title="GitHub's CSS is boring. So I refreshed the design" /><published>2019-06-12T09:09:00-04:00</published><updated>2019-06-12T09:09:00-04:00</updated><id>http://0.0.0.0:4000/projects/2019/06/12/Styiling-GitHub</id><content type="html" xml:base="http://0.0.0.0:4000/projects/2019/06/12/Styiling-GitHub.html">&lt;p&gt;I have been using GitHub since 2017, and have been getting tired of GitHubs theme. I didnt need a huge change, just a small refresh. So, to solve this, I whipped out &lt;a href=&quot;https://addons.mozilla.org/en-CA/firefox/addon/styl-us/&quot;&gt;Stylus&lt;/a&gt; and made a nice little CSS file for it.&lt;/p&gt;
&lt;h2 id=&quot;the-css&quot;&gt;The CSS&lt;/h2&gt;
&lt;p&gt;Here is the CSS. Feel free to play with it.&lt;/p&gt;
&lt;div class=&quot;language-css highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;@-moz-document&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;url-prefix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;https://github.com/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.Header&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#1a3652&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.repohead.experiment-repo-nav&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#fff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.reponav-item.selected&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;border-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#fff&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#fff&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#4a79a8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.btn.hover&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.btn&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:hover&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.btn&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.btn&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#fafafa&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;background-image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;-180deg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#fafafa&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#fafafa&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;90%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.btn-primary.hover&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.btn-primary&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:hover&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.btn-primary&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.btn-primary&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#1aaa55&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;background-image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;-180deg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#1aaa55&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#1aaa55&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;90%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;.overall-summary&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;use-it-yourself&quot;&gt;Use it yourself&lt;/h2&gt;
&lt;p&gt;I put this theme on userstyles.org. You can download and install it by going to &lt;a href=&quot;https://userstyles.org/styles/172679/ewpratten-s-githubtheme&quot;&gt;my userstyles page&lt;/a&gt;.&lt;/p&gt;</content><author><name></name></author><category term="projects" /><summary type="html">I have been using GitHub since 2017, and have been getting tired of GitHubs theme. I didnt need a huge change, just a small refresh. So, to solve this, I whipped out Stylus and made a nice little CSS file for it.</summary></entry></feed>
&lt;p&gt;&lt;img src=&quot;/assets/images/w2a.png&quot; alt=&quot;Thr result&quot; /&gt;&lt;/p&gt;</content><author><name></name></author><summary type="html">I was scrolling through reddit the other day, and came across this great post by u/MasterQuacks.</summary></entry></feed>

View File

@ -102,12 +102,12 @@
<ul>
<li><h3><a href="/projects/2019/07/01/devDNS.html" class="link" title="2019-07-01 18:13:00 -0400">devDNS</a></h3></li>
<li><h3><a href="/projects/2019/06/27/PWNlink.html" class="link" title="2019-06-27 13:16:00 -0400">I had some fun with a router</a></h3></li>
<li><h3><a href="/random/2019/06/27/Python.html" class="link" title="2019-06-27 03:00:00 -0400">Hunting snakes with a shotgun</a></h3></li>
<li><h3><a href="/projects/2019/06/26/BashSmash.html" class="link" title="2019-06-26 11:48:00 -0400">BashSmash</a></h3></li>
</ul>
<a href="all_posts.html" class="button next">View All</a>

View File

@ -0,0 +1,175 @@
<!DOCTYPE html>
<html>
<head>
<title>Evan Pratten</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<!--[if lte IE 8]><script src="/assets/js/ie/html5shiv.js"></script><![endif]-->
<link rel="stylesheet" href="/assets/css/main.css" />
<!-- <link rel="stylesheet" href="/assets/css/custom.css" /> -->
<!--[if lte IE 9]><link rel="stylesheet" href="/assets/css/ie9.css" /><![endif]-->
<!--[if lte IE 8]><link rel="stylesheet" href="/assets/css/ie8.css" /><![endif]-->
<!-- Syntax highlight -->
<link rel="stylesheet" href="/assets/css/vs.css" />
</head>
<body>
<!-- Wrapper -->
<div id="wrapper">
<!-- Header -->
<header id="header" >
<a href="http://0.0.0.0:4000//" class="logo"><strong>Evan Pratten</strong> <span>retrylife</span></a>
<nav>
<!-- <a href="#menu">Menu</a> -->
</nav>
</header>
<!-- Menu -->
<!-- <nav id="menu">
<ul class="links">
<li><a href="http://0.0.0.0:4000//">Home</a></li>
<li><a href="http://0.0.0.0:4000/all_posts.html">All posts</a></li>
</ul>
<ul class="actions vertical">
<li><a href="#" class="button special fit">Get Started</a></li>
<li><a href="#" class="button fit">Log In</a></li>
</ul>
</nav> -->
<section id="banner" class="major" style="height:40vh">
<div class="inner">
<header class="major">
<h1>devDNS</h1>
</header>
<div class="content">
<p >The DNS over devRant service</p>
</div>
</div>
</section>
<!-- Main -->
<div id="main" class="alt">
<!-- One -->
<section id="one">
<div class="inner">
<p><p>Over the past year and a half, I have been hacking my way around the undocumented <a href="https://devrant.com">devRant</a> auth/write API. At the request of devRants creators, this API must not be documented due to the way logins work on the platform. That is besides the point. I have been working on a little project called <a href="https://devrant.com/collabs/2163502">devDNS</a> over the past few days that uses this undocumented API. Why must I be so bad at writing intros?</p>
<h2 id="what-is-devdns">What is devDNS</h2>
<p>devDNS is a devRant bot written in python. It will serve any valid DNS query from any user on the platform. A query is just a comment in one of the following forms:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@devDNS example.com
</code></pre></div></div>
<p>or</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@devDNS MX example.com
</code></pre></div></div>
<p>Of course, <code class="highlighter-rouge">MX</code> and <code class="highlighter-rouge">example.com</code> are to be replaced with the domain and entry of your choosing.</p>
<p>devDNS was inspired by <a href="https://twitter.com/1111resolver">@1111Resolver</a>, and the source is available on <a href="https://github.com/Ewpratten/devDNS">GitHub</a>.</p>
<h2 id="how-it-works">How it works</h2>
<p>The Python script behind devDNS is very simple. devDNS does the following every 10 seconds:</p>
<ul>
<li>Fetch all new notifs</li>
<li>Find only mentions</li>
<li>Spin off a thread for each mention that passes a basic parser (Is the message 2 or 3 words long)</li>
<li>In the thread, check if the message is a control message (allows me to view the status of the bot via devRant)</li>
<li>Check if the request matches a required pattern</li>
<li>Call <code class="highlighter-rouge">dnspython</code> with requested record and domain</li>
<li>Receive answer from a custom <a href="https://pi-hole.net/">PIHole</a> server with caching and super low latency</li>
<li>Send a comment with the results to the requester</li>
</ul>
<p>Thats it! Super simple, and only two days from concept to reality.</p>
<h2 id="where-is-this-hosted">Where is this hosted?</h2>
<p>This program is hosted on a raspberry pi laying in my room running docker. I also have <a href="https://www.portainer.io/">Portainer</a> set up so I can easily monitor the bot from my phone over my VPN.</p>
</p>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<div class="inner">
<ul class="icons">
<li><a href="https://twitter.com/ewpratten" class="icon alt fa-twitter" target="_blank"><span class="label">Twitter</span></a></li>
<li><a href="https://gitlab.com/u/ewpratten" class="icon alt fa-gitlab" target="_blank"><span class="label">GitLab</span></a></li>
<li><a href="https://github.com/ewpratten" class="icon alt fa-github" target="_blank"><span class="label">GitHub</span></a></li>
<li><a href="/feed.xml" class="icon alt fa-rss" target="_blank"><span class="label">RSS</span></a></li>
</ul>
<ul class="copyright">
<li>&copy; Evan Pratten retrylife</li>
<li>Design: <a href="https://html5up.net" target="_blank">HTML5 UP</a></li>
</ul>
</div>
</footer>
</div>
<!-- Scripts -->
<script src="http://0.0.0.0:4000/assets/js/jquery.min.js"></script>
<script src="http://0.0.0.0:4000/assets/js/jquery.scrolly.min.js"></script>
<script src="http://0.0.0.0:4000/assets/js/jquery.scrollex.min.js"></script>
<script src="http://0.0.0.0:4000/assets/js/skel.min.js"></script>
<script src="http://0.0.0.0:4000/assets/js/util.js"></script>
<!--[if lte IE 8]><script src="http://0.0.0.0:4000/assets/js/ie/respond.min.js"></script><![endif]-->
<script src="http://0.0.0.0:4000/assets/js/main.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-74118570-2"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'UA-74118570-2');
</script>
</body>
</html>