lots of updates!

This commit is contained in:
Brendan McDevitt 2018-10-09 02:58:45 -04:00
parent 84bc4b0113
commit 8b736fded7
22 changed files with 92 additions and 499 deletions

View file

@ -1,33 +0,0 @@
---
layout: post
title: "day 1"
date: 2018-01-01
categories: programming
---
# 100 Days of Code
With a brand new year, comes a fresh start, a clean slate. I am going to begin
my new year with something I have just come across: [100daysofcode](http://100daysofcode.com/) challenge.
I have forked the 100 days of code repo from github and am using the log to
track my daily progress. It will be fun, and it will be a great way to keep me
accountable for building my python knowledge. Here is an example snippet from
the code I did for day 1.
### Day 1:
{% highlight python %}
def gen_ssh_keypair():
""" Generate an RSA private / public keypair """
key = RSA.generate(2048)
# generate private key - output to file
with open('rsa_privkey.pem', 'wb') as privkey:
privkey.write(key.exportKey())
# generate public key - output to file
with open('rsa_pubkey.pem', 'wb') as pubkey:
pubkey.write(key.publickey().exportKey())
return 0
{% endhighlight %}

View file

@ -1,19 +0,0 @@
---
layout: post
title: "day 2"
date: 2018-01-02
categories: programming
---
# 100 Days of Code
### Day 2:
Today we are going to make a Discord chat bot. Bots have always been
interesting to me.
Trying to make a computer program behave like a human sounds like a fun
challenge, and a great way to play some fun pranks on my friends on Discord.
So far, I have sketched up the initial framework in my python program using the
discordpy library. I will need to learn more about the following:
- asyncio
- coroutines
These seem to be two main concepts that this library uses, and it will help aid
my skills in the future when making programs that focus on performance.

View file

@ -1,17 +0,0 @@
---
layout: post
title: "day 3"
date: 2018-01-03
categories: programming
---
# 100 Days of Code
### Day 3:
Today I could not find time to work on the coding aspect of the bot, but I did
grab some audio recordings that I need for the bot. I am mainly making this bot
to prank my friends in discord with voice recordings of funny moments that
occur in discord. I am going to make it queryable via prepending commands with
a !. I still did get to code today for work. I am working on some stuff in
python and I have to write unit tests, so I wrote a test for a couple of
functions

View file

@ -1,16 +0,0 @@
---
layout: post
title: "day 4"
date: 2018-01-04
categories: programming
---
# 100 Days of Code
### Day 4:
Today I worked on some more unit tests with a program I am building at work. I
learned a good deal about unit test calls and the different assert options you
can pass. I also looked further into the discord python library and copied some of the
example bots into an examples directory in my repo. I will need to experiment
further with those and look up more information on asyncio and how to properly
use it.

View file

@ -1,27 +0,0 @@
---
layout: post
title: "day 5"
date: 2018-01-05
categories: programming
---
# 100 Days of Code
### Day 5:
Today I did not have the energy to do anything with my discord bot. I will work
on that tomorrow and sunday. I mainly just did some hacker rank problems
involving strings. Here is a post someone on hacker rank who is much more
clever than me for validating any characters in strings:
```python
str = raw_input()
print any(c.isalnum() for c in str)
print any(c.isalpha() for c in str)
print any(c.isdigit() for c in str)
print any(c.islower() for c in str)
print any(c.isupper() for c in str)
```
that will return True or False if ANY of the characters contain alphanumberic,
alphabetical, a digit, lowercase, or uppercase. A nice little shortcut that I
will remember.

View file

@ -1,89 +0,0 @@
---
layout: post
title: "day 6"
date: 2018-01-06
categories: programming
---
# 100 Days of Code
### Day 6:
Today I made use of the python-nmap library and made a class that I will be
able to import into future modules. I started out making things like a ping sweeping tool and
banner grabber, as well as a ssl cipher suite checker. I made a subclass of the nmap
PortScanner class to start so I have access to all of those utilities. Subclasses are something I have been looking into recently.
It is an easy way to add existing functionality to another object. This class will end up being the base
library that I use when I make my own port scanning scripts. here is what I
have so far:
```python
class NmapUtility(nmap.PortScanner):
def __init__(self, hostname, hosts=False):
""" Initialize with hostname and optional list of hosts """
self.hostname = hostname
def scan_host(self, hostname, portrange):
""" Scan a host using nmap.scan """
return self.scan(hostname, portrange)
def scan_hosts(self, hosts):
""" Scan a list of hosts """
pass
def ping_sweep(self, hosts):
""" Ping sweep a list of hosts """
self.scan(hosts=hosts, arguments='-n -sP -PE -PA21,23,80,3389')
hosts_list = [(x, self[x]['status']['state']) for x in self.all_hosts()]
for host, status in hosts_list:
print('{0}:{1}'.format(host, status))
def nmap_version(self):
""" Get nmap version being used """
return self.nmapVersion()
def command_line(self):
""" Run nmap.command_line """
return self.command_line
def cipher_check(self, hostname, portrange):
""" Run --script ssl-enum-ciphers on hostname """
return self.scan(hostname,
portrange,
arguments='--script ssl-enum-ciphers')
def get_csv(self):
""" Run scan.csv() """
return self.csv()
def all_tcp(self, hostname=False):
""" Get all ports for tcp protocol in sorted output """
if hostname:
return self[hostname].all_tcp()
return self[self.hostname].all_tcp()
def all_udp(self, hostname=False):
""" Get all ports for udp protocol in sorted output
requires scanHost() or scan() to be run first
"""
if hostname:
return self[hostname].all_udp()
return self[self.hostname].all_udp()
def banner_grab(self, portrange, hostname=False):
""" Grab banners from ports """
if hostname:
return self.scan(hostname, portrange,
arguments='-sV --script=banner')
return self.scan(self.hostname, portrange,
arguments='-sV --script=banner')
```

View file

@ -1,15 +0,0 @@
---
layout: post
title: "day 7"
date: 2018-01-08
categories: programming
---
# 100 Days of Code
### Day 7:
Took a break from coding on Sunday. Needed to take care of some things around
my apartment instead. Today, I ended up programming for a few hours while at
work. I learned more about initialization of objects and about unpacking
tuples.

View file

@ -1,15 +0,0 @@
---
layout: post
title: "day 8"
date: 2018-01-09
categories: programming
---
# 100 Days of Code
### Day 8:
I installed the [xonsh](http://xon.sh/) shell on my home system after a
co-worker introduced me to it earlier today. I am going to be experimenting with it all night
and configuring it with runtime configs and importing my bash aliases and
functions. This is a really cool shell that will help me accelerate how quickly
I learn core skills of python. It's like Ipython and bash had a baby! I am in!

View file

@ -1,14 +0,0 @@
---
layout: post
title: "day 9"
date: 2018-01-10
categories: programming
---
# 100 Days of Code
### Day 9:
Going to be writing some more add-ons to nmap module. Also, added an example of
a bubble sort algorithm in python, and accompanied it with a wikipedia
description of the algorithm. I am going to be looking into implementing
another type of sorting algorithm today.

View file

@ -1,95 +0,0 @@
---
layout: post
title: "day 10"
date: 2018-01-11
categories: programming
---
# 100 Days of Code
### Day 10:
Made fibonacci programs from tutorials I found on youtube. One that introduces
the concept of memoization or storing results of recent function calls to
improve the speed of the recursive function. Also a basic bubblesort program in python
that I found from another tutorial. This is very basic stuff but I want to make sure I
know as much foundational knowledge as I can. Socrataca on youtube is a great
channel with lots of math and science themed videos. That is where I found
these tutorials. Here is a
[link](https://www.youtube.com/watch?v=Qk0zUZW-U_M&list=PLi01XoE8jYohWFPpC17Z-wWhPOSuh8Er-&index=18)
to the python video on the fibonacci sequence.
##### No Cache
```python
#!/usr/bin/env python3
# this shows the fibonacci sequence with basic recursion.
# note that it gets very slow at the end due to the recursion
def fibonacci(n):
if n == 1:
return 1
elif n == 2:
return 1
elif n > 2:
return fibonacci(n-1) + fibonacci(n-2)
for n in range(1, 101):
print(n, ":", fibonacci(n))
```
#### Cache
```python
#!/usr/bin/env python3
# this introduces recursive fibonacci with a cache of recent function calls
# this is introducing memoization: caching recent function call results
fibonacci_cache = {}
def fibonacci(n):
# If we have cached the value, then return it
if n in fibonacci_cache:
return fibonacci_cache[n]
# compute nth term
if n == 1:
value = 1
elif n == 2:
value = 1
elif n > 2:
value = fibonacci(n-1) + fibonacci(n-2)
fibonacci_cache[n] = value
return value
for n in range(1, 101):
print(n, ":", fibonacci(n))
```
#### Cache using functools lru_cache
```python
#!/usr/bin/env python3
from functools import lru_cache
@lru_cache(maxsize = 1000)
def fibonacci(n):
# check if type is positive int
if type(n) != int:
raise TypeError("n must be a positive int")
if n < 1:
raise ValueError("n must be a positive int")
if n == 1:
return 1
elif n == 2:
return 1
elif n > 2:
return fibonacci(n-1) + fibonacci(n-2)
for n in range(1, 501):
print(n, ":", fibonacci(n))
```

View file

@ -1,34 +0,0 @@
---
layout: post
title: "day 11"
date: 2018-01-17
categories: programming
---
# 100 Days of Code
### Day 11:
Took a break on the weekend, but I am back at it. Today, I made a class for
decoding json data. Here is the code. I can use this with my xonsh shell now so
its proving to be useful.
```python
import os
import json
from pprint import pprint
class JsonUtils(object):
""" Json utility library """
def decode(self, json_file):
""" Decode a json string or file that contains json """
if os.path.isfile(json_file):
with open(json_file, 'r'):
data = json.load(json_file)
return pprint(data)
else:
data = json.loads(json_file)
return pprint(data)
```

View file

@ -1,19 +0,0 @@
---
layout: post
title: "day 12"
date: 2018-01-18
categories: programming
---
# 100 Days of Code
### Day 12:
Today I made basic aws scripts that interact with ec2 and s3. I am going to look
into designing programs that will migrate my existing OVH vps using a
combination of the API they provide, unix tools like rsync, and the AWS API. I
need to get better at interacting with boto3 so this will be perfect.
interacting with API's is fun and I really enjoy working with the HTTP
protocol. I also made a cronjob on my vps that will run a git pull of my
brendan.mcdevitt.tech repo, and jekyll is in watch mode so it will always stay
up to date as long as I am pushing to git.

View file

@ -1,67 +0,0 @@
---
layout: post
title: "day 13"
date: 2018-01-19
categories: programming
---
# 100 Days of Code
### Day 13:
Today I made a script that uses the Steam HTTP API to iterate through all
possible games/apps on steam and outputs the game/app name, and current player
count. It is a fun way for me to practice interacting with json dictionaries.
```python
import json
import requests
BASE_URL = 'https://api.steampowered.com'
def main():
""" Loop through list of appids and feed appid list into retrieval of
current players in game corresponding to appid
"""
appnames, appids = zip(*get_appid())
for appname, appid in zip(appnames, appids):
resp_data = json.loads(get_current_players(appid))
player_count = resp_data['response']['player_count']
print('Game Name: {}'.format(appname))
print('Current Players: {}\n'.format(player_count))
def get_current_players(appid):
""" Queries Steam API for number of current players in a game
:param appid: The appid of the game title
:param type: `str`
:returns: Returns string json response of number of current players
:rtype: `str`
"""
url = '{}/ISteamUserStats/GetNumberofCurrentPlayers/v1/?key=KEY&format=json&appid={}'.format(BASE_URL, appid)
r = requests.get(url)
return r.text
def get_appid():
""" Queries Steam API for appids
:returns: (appname, appid)
:rtype: `tuple`
"""
url = '{}/ISteamApps/GetAppList/v2'.format(BASE_URL)
r = requests.get(url)
json_data = json.loads(r.text)
apps = json_data['applist']['apps']
appname_and_id = [(dic['name'], dic['appid']) for dic in apps]
return appname_and_id
if __name__ == '__main__':
main()
```

View file

@ -1,11 +0,0 @@
<!DOCTYPE html>
<html>
<body>
{% for item in site.100-days-of-code %}
<h2>{{ item.title }}</h2>
<p>{{ item.description }}</p>
<p><a href="{{ item.url }}">{{ item.title }}</a></p>
{% endfor %}
</body>
</html>

View file

@ -14,7 +14,7 @@
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: brendan.mcdevitt.tech
email: bpmcdevitt@thelinuxspace.com
email: brendan@mcdevitt.tech
description: > # this means to ignore newlines until "baseurl:"
computers, free software, infosec, programming, gaming, system administration
baseurl: "" # the subpath of your site, e.g. /blog
@ -27,9 +27,9 @@ markdown: kramdown
theme: minima
plugins:
- jekyll-feed
collections:
100-days-of-code:
output: true
#collections:
# 100-days-of-code:
# output: true
# Exclude from processing.
# The following items will not be processed, by default. Create a custom list

View file

@ -1,11 +1,9 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>{{ page.title }}</title>
<meta name="author" content="Brendan McDevitt" />
<link href="http://feeds.feedburner.com/brendan" rel="alternate" title="brendan mcdevitt" type="application/atom+xml" />
<meta name="readability-verification" content="QCzSs992GxmRYRKVpPeZ6LE2tS8aYKxsSSQKV8YM"/>
<!-- syntax highlighting CSS -->
<link rel="stylesheet" href="/css/syntax.css" type="text/css" />
@ -14,7 +12,7 @@
<link rel="stylesheet" href="/css/screen.css" type="text/css" media="screen, projection" />
<!-- Typekit -->
<script type="text/javascript" src="http://use.typekit.com/jpd0pfm.js"></script>
<script type="text/javascript" src="https://use.typekit.com/jpd0pfm.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
</head>
<body>
@ -30,7 +28,7 @@
<a href="https://github.com/booboy"><img style="position: absolute; top: 0;
right: 0; border: 0; width: 149px; height: 149px;"
src="http://aral.github.com/fork-me-on-github-retina-ribbons/right-green@2x.png" alt="Fork me on GitHub"></a>
src="https://aral.github.com/fork-me-on-github-retina-ribbons/right-green@2x.png" alt="Fork me on GitHub"></a>
</body>
</html>

View file

@ -1,14 +0,0 @@
---
layout: post
title: "devops team outing"
date: 2017-11-09
categories: misc
---
I had alot of fun tonight with my new co-workers! I am part of the devops team at Narrative Science. We went out tonight for a team outing. It was axe throwing! That was the first time
I have ever done something like that. I struggled in the beginning, but got a little bit better towards the end. Some of my teammates were absolutely
incredible at it! Here is a pic of the entire team! It was lots of fun, would
do it again in a heartbeat!
![devops_team_outing_yay](/assets/devops_team_axe_throwing_yay.jpg){:class="img-responsive"}

View file

@ -0,0 +1,63 @@
---
layout: post
title: "all shine on"
date: 2018-06-19
categories: misc
---
```
Instant Karma's gonna get you
Gonna knock you right on the head
You better get yourself together
Pretty soon you're gonna be dead
What in the world you thinking of
Laughing in the face of love
What on earth you tryin' to do
It's up to you, yeah you
Instant Karma's gonna get you
Gonna look you right in the face
Better get yourself together darlin'
Join the human race
How in the world you gonna see
Laughin' at fools like me
Who in the hell d'you think you are
A super star
Well, right you are
Well we all shine on
Like the moon and the stars and the sun
Well we all shine on
Ev'ryone come on
Instant Karma's gonna get you
Gonna knock you off your feet
Better recognize your brothers
Ev'ryone you meet
Why in the world are we here
Surely not to live in pain and fear
Why on earth are you there
When you're ev'rywhere
Come and get your share
Well we all shine on
Like the moon and the stars and the sun
Yeah we all shine on
Come on and on and on on on
Yeah yeah, alright, uh huh, ah
Well we all shine on
Like the moon and the stars and the sun
Yeah we all shine on
On and on and on on and on
Well we all shine on
Like the moon and the stars and the sun
Well we all shine on
Like the moon and the stars and the sun
Well we all shine on
Like the moon and the stars and the sun
Yeah we all shine on
Like the moon and the stars and the sun
-- John Lennon
```

View file

@ -0,0 +1,21 @@
---
layout: post
title: "oscp prep - hex tutorials"
date: 2018-10-09
categories: oscp prep
---
# oscp prep - hex tutorials
dumping files to hexadecimal and octal output, is something that i am going to
be really trying to learn. here are some links to good resources:
## hex color codes
{% include youtubePlayer.html id="6cJd7eyYBFs" %}
##### links
- [rtfm](http://man7.org/linux/man-pages/man1/hexdump.1.html)
- [wikipedia - hexdump](https://en.wikipedia.org/wiki/Hex_dump)
- [wikipedia - hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal)
- [practice color codes](https://yizzle.com/whatthehex/)
- [making sense of hexadump](https://www.suse.com/c/making-sense-hexdump/)
- [hexadecimal numbers](https://www.electronics-tutorials.ws/binary/bin_3.html)

View file

@ -5,7 +5,7 @@ permalink: /about/
---
I am an aspiring security researcher working as a *nix administrator. I
like to program in python and play fast paced deathmatch video games. I try to
like to program in python and ruby. i also like to play fast paced deathmatch video games. I try to
better myself each day. If you would like to reach out, I can be reached via:
- email - bpmcdevitt[at]thelinuxspace[dot]com

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 MiB

View file

@ -9,8 +9,4 @@ title: brendan mcdevitt
{% for post in site.posts %}
<li><span>{{ post.date | date_to_string }}</span> &raquo; <a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
<h1>100 Days of Code</h1>
{% for item in site.100-days-of-code %}
<li><span>{{ item.date | date_to_string }}</span> &raquo; <a href="{{ item.url }}">{{ item.title }}</a></li>
{% endfor %}
</ul>