endlessh was pretty cool and a more modern version is even better ! I’ll give it a shot !
On a side note, I found a way to trap HTTP connections too while working on my cyb.farm project. The go implementation is ridiculously simple: tarpit.go. It works by providing an endless stream of custom headers to the client, which it is supposed to ingest before getting to the content itself.
I didn’t come up with this idea myself, this is straight from OpenBSD disk setup guide (which I personally trust as a good source of info) :
Encrypting External Disks
This section explains how to set up a cryptographic softraid volume for an external USB drive. An outline of the steps is as follows:
- Overwrite the drive’s contents with random data
[…]
# dd if=/dev/urandom of=/dev/rsd3c bs=1m
Well as I see it, it will just do a lot of write operations to your disk, which might eventually damage it if you do it a lot (just like any write operation done on a disk). However, this specific command isn’t bad per se, and is even technically a good thing to do for preparing to full disk encryption.
Keeping the source IP intact means you’ll have troubles routing back the traffic through host B.
Basically host A won’t be able to access the internet without going through B, which could not be what you want.
Here’s how it works:
On host A:
On host B:
This should do what you need. However, if I may comment it out, I’d say you should give up on carrying the source IP address down to host A. This setup I described is clunky and can fail in many ways. Also I can see no benefits of doing that besides having “pretty logs” on host A. If you really need good logs, I’d suggest setting up a good reverse proxy on host B and forwarding it’s logs to a collector on host A.
OpenBSD is the most pleasing expérience I’ve had with an OS. It’s fully contained and has all the tools you need without needing to install anything (eg a DNS, HTTP, SMTP servers, a proxy, a good firewall). All config files look alike and use the same keywords for the same things, making it straightforward to configure everything.
And regarding RAID 1, I’ve never done it myself, but it totally works out of the box (as well as full disk encryption).
The thing is, this layout moves symbols to places that are much easier to remember (~ is altgr+n, ç is altgr+c, $ is altgr+d, parenthesis/brackets are next to each other, etc…) I got used to it very quickly because the new placement makes sense, and the fact you only have to remember symbols and not alphanum chars helps a lot. Definitely worth trying IMO.
Did you know about the New AZERTY ? I’ve been using it for a few years now and it’s definitely a great improvement, while remaining compatible enough with the standard one so you are not lost when you use a colleague’s setup.
Looks like you shouldn’t ask for anything at all, given that you cannot take a single answer without being a condescending jerk. I’m not affiliated to cyberia.is in any mean by the way just proposing a service that you could use to solve your problem if you were not too busy being a douchebag.
Keep in mind that using your own VPS as a VPN doesn’t bring anonymity. You’re simply replacing one IP tied to your name (your ISP) with another one (your VPS).
You hide your traffic from your ISP, and delegate it to your VPS provider.
This will be the same for your DNS. If you want true anonymity regarding DNS, you should use someone else’s service, preferably over encrypted channels, eg. cyberia.is DoT.
I personally use it as a forwarder from a box inside my home (along with others), and use this box as the local DNS when I’m home. This way I know that all DNS traffic is encrypted, and doesn’t leak anything to my ISP or VPS or whatever.
I’ve made something that’s both fun and challenging: https://cyb.farm
It’s a tech adventure featuring many challenges about computer science stuff (crypto, stegano, protocols, development, …). It starts on the 31st of October, and will probably can keep you busy for a few weeks ^^
C, definitely.
As a hobbyist programmer, I can write code just the way I want, in my own style and without any legacy code. In that context I find writing C relaxing, as I like to understand how things work internally and avoid abstractions levels as much as I can. ASM requires too much discipline though 😅
For the past year, I’ve been working on an online scavenger hunt. It features many tech related challenges on various topics (web, protocols, crypto, stegano, …).
This is the project as a whole, but I had to work on many sub-project to bring it to life, out of which:
What I love about this project is that it touches many different topics. I had to setup reverse proxies, complex firewall rules, VPNs, abuse the TCP/IP stack, … I could also work on very useless but fun topics, like creating a tool that answers to ICMPv6 traceroute packets to insert fake hops between the requester and the destination. I’m now close to releasing it, and I wonder what I’ll do when this is over…
My account has not seen a single commit in years now, and yet I can let it go… I still “need” it for support on an old project of mine that I share with other people, and to submit changes for projects I care about which are only on GitHub.
I also keep my account for name squatting purposes, and so people can find the link to my actual repo.
I don’t think I’ll go all the way to delete my account, but my projects are definitely not reliant on it anymore.
I agree that it’s hard, but not impossible. This usually boils down to how Nazi people are when merging code. In a corporate environment, nobody gives a damn so yeah you gotta use whatever you want because there are already different indentation systems within the same file anyway :)
But hey, you gotta live by the changes you want to see happen, so I personally put a lot of effort in formatting my code regardless.
I understand your point of view. Personally I either copy the previous line and replace the arguments there, or insert X number of space using the repetition feature of my editor. It also has a feature that will align multiple cursors together with the “farthest” one using space, which is a killer feature for me! (See this presentation video @1:40).
You might not understand how to do it properly so here’s the idea:
Tabs will let you reach the indentation level of the current block, then from here, you’ll use spaces to align stuff property. Here’s an example, where >•••
are tabs (I’m exaggerating alignment for the sake of the example) :
>•••if (condition1 == true
>••• || condition2 != false)
>•••{
>•••>•••struct ident people[] = [
>•••>•••>•••{
>•••>•••>•••>•••.name = "bob",
>•••>•••>•••>•••.pubkey = "value1",
>•••>•••>•••},
>•••>•••>•••{
>•••>•••>•••>•••.name = "alice",
>•••>•••>•••>•••.pubkey = "value2",
>•••>•••>•••}
>•••>•••];
>•••>•••secureConnection(people[0].name, people[0].pubkey,
>•••>••• people[1].name, people[1].pubkey,
>•••>••• CRYPTO_ALGO_DEFAULT);
>•••}
As you can see, everything will stay correctly aligned as long as it’s within the same block.
When I talk about alignment it’s not about function arguments, but values, “=” signs and such. You simply cannot use tabs for that because alignment must be fixed and indentation independent:
CreateOrderRequest(
user,
productDetails => order.detail,
pricingCalculator => DEFAULT_CALCULATOR,
order => order.internalNumber)
The real answer here.