<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: beladevo</title>
    <description>The latest articles on DEV Community by beladevo (@beladevo).</description>
    <link>https://dev.to/beladevo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3204011%2F8c3bb0da-d5f1-4d9a-b47c-2bf8dc07f1f9.png</url>
      <title>DEV Community: beladevo</title>
      <link>https://dev.to/beladevo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/beladevo"/>
    <language>en</language>
    <item>
      <title>Redirector OSINT - One-Command Redirect &amp; Logging Tool</title>
      <dc:creator>beladevo</dc:creator>
      <pubDate>Fri, 05 Sep 2025 11:55:56 +0000</pubDate>
      <link>https://dev.to/beladevo/redirector-osint-one-command-redirect-logging-tool-f48</link>
      <guid>https://dev.to/beladevo/redirector-osint-one-command-redirect-logging-tool-f48</guid>
      <description>&lt;p&gt;When doing OSINT or red team work, I always needed a quick way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;redirect traffic to a target,&lt;/li&gt;
&lt;li&gt;log IPs, User-Agents, headers, methods, and timestamps,&lt;/li&gt;
&lt;li&gt;and view it all in a clean dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built &lt;strong&gt;Redirector OSINT&lt;/strong&gt; – deployable in 30 seconds with pip or Docker.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltrfbzujtb4kder3z771.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltrfbzujtb4kder3z771.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install redirector-osint&lt;br&gt;
redirector run --redirect https://target.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker pull beladevos/redirector&lt;br&gt;
docker run -p 8000:8000 beladevos/redirector --redirect https://target.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Auto-refreshing dashboard&lt;br&gt;
✅ Filters &amp;amp; exports (CSV/JSON)&lt;br&gt;
✅ REST API &amp;amp; security features (auth, rate limits)&lt;/p&gt;

&lt;p&gt;Use cases: OSINT collection, phishing simulations (defense), red team ops, API testing, analytics.&lt;/p&gt;

&lt;p&gt;👉 GitHub: &lt;a href="https://github.com/beladevo/redirector" rel="noopener noreferrer"&gt;beladevo/redirector&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 Full write-up: &lt;a href="https://omribeladev.medium.com/redirector-osint-the-fastest-way-to-launch-url-redirection-intelligence-collection-c1ea2948809e" rel="noopener noreferrer"&gt;Medium article&lt;/a&gt;&lt;/p&gt;

</description>
      <category>osint</category>
      <category>cybersecurity</category>
      <category>opensource</category>
      <category>python</category>
    </item>
    <item>
      <title>[Stop Fighting the Clock] - How to Control Time in Your Tests Without Hacks</title>
      <dc:creator>beladevo</dc:creator>
      <pubDate>Sun, 06 Jul 2025 11:25:15 +0000</pubDate>
      <link>https://dev.to/beladevo/stop-fighting-the-clock-how-to-control-time-in-your-tests-without-hacks-397c</link>
      <guid>https://dev.to/beladevo/stop-fighting-the-clock-how-to-control-time-in-your-tests-without-hacks-397c</guid>
      <description>&lt;p&gt;Hey everyone 👋&lt;/p&gt;

&lt;p&gt;I wanted to share a little library I’ve been building lately, called &lt;a href="https://www.npmjs.com/package/timewarp-sim" rel="noopener noreferrer"&gt;&lt;code&gt;timewarp-sim&lt;/code&gt;&lt;/a&gt;. If you’ve ever had to test date logic or simulate time passing, you know how frustrating it can be. You either end up waiting forever, fiddling with your system clock, or writing tons of brittle mocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;timewarp-sim&lt;/strong&gt; solves this cleanly by giving you a &lt;em&gt;deterministic time machine&lt;/em&gt; for your JavaScript and TypeScript code.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ What does it do?
&lt;/h2&gt;

&lt;p&gt;✅ Freeze time at a specific moment&lt;br&gt;
✅ Advance time however you like (seconds, hours, even decades)&lt;br&gt;
✅ Travel to any timestamp instantly&lt;br&gt;
✅ &lt;strong&gt;Globally mock &lt;code&gt;Date.now()&lt;/code&gt; and &lt;code&gt;new Date()&lt;/code&gt; so all your dependencies see the same simulated clock&lt;/strong&gt;&lt;br&gt;
✅ Register hooks to react whenever time changes&lt;br&gt;
✅ Unfreeze and return to real time anytime&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Why should you care?
&lt;/h2&gt;

&lt;p&gt;If you work on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Session or token expiration logic&lt;/li&gt;
&lt;li&gt;Caching and TTL validation&lt;/li&gt;
&lt;li&gt;Recurring jobs (cron-like scheduling)&lt;/li&gt;
&lt;li&gt;Billing or subscription renewals&lt;/li&gt;
&lt;li&gt;Reports that aggregate data by date&lt;/li&gt;
&lt;li&gt;Anything else where time matters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…this tool can &lt;strong&gt;save you hours of debugging and testing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You no longer have to wait for timeouts to expire or write fragile &lt;code&gt;setTimeout&lt;/code&gt; hacks- just jump forward in time with a single line of code.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Quick Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Timewarp&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;timewarp-sim&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Real time:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;Timewarp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;freeze&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Frozen:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Timewarp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;Timewarp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enableGlobalMocking&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mocked Date.now():&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;Timewarp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;advance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;After 1 hour:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;Timewarp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;travelTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2040-01-01T00:00:00Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Traveled to:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;Timewarp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unfreeze&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;Timewarp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disableGlobalMocking&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Back to real time:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🌟 Get Involved
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;timewarp-sim&lt;/strong&gt; is open source, and I’d love to see it grow with help from the community!&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/beladevo/timewarp-sim" rel="noopener noreferrer"&gt;⭐ Star the project on GitHub&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/beladevo/timewarp-sim/issues" rel="noopener noreferrer"&gt;Open issues&lt;/a&gt; for bugs or feature ideas&lt;br&gt;
👉 &lt;a href="https://github.com/beladevo/timewarp-sim/pulls" rel="noopener noreferrer"&gt;Contribute code&lt;/a&gt; if you want to make it even better&lt;/p&gt;

&lt;p&gt;If you find it useful, share it with your teammates or that friend who still uses &lt;code&gt;setTimeout(999999999)&lt;/code&gt; to simulate waiting.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
