<?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: Radosław</title>
    <description>The latest articles on DEV Community by Radosław (@radoslawdev).</description>
    <link>https://dev.to/radoslawdev</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%2F3853577%2Fd8f9af03-9335-49d3-87a3-d4a85789d5b9.jpeg</url>
      <title>DEV Community: Radosław</title>
      <link>https://dev.to/radoslawdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/radoslawdev"/>
    <language>en</language>
    <item>
      <title>Building NETRadar - My First Real Network Scanner in Python</title>
      <dc:creator>Radosław</dc:creator>
      <pubDate>Sun, 12 Apr 2026 15:28:06 +0000</pubDate>
      <link>https://dev.to/radoslawdev/building-netradar-my-first-real-network-scanner-in-python-1505</link>
      <guid>https://dev.to/radoslawdev/building-netradar-my-first-real-network-scanner-in-python-1505</guid>
      <description>&lt;h1&gt;
  
  
  Building NetRadar – My First Real Network Scanner in Python
&lt;/h1&gt;

&lt;p&gt;Instead of doing another tutorial project, I decided to build something that actually works in a real environment.&lt;/p&gt;

&lt;p&gt;That’s how &lt;strong&gt;NetRadar&lt;/strong&gt; came to life — a simple CLI tool for scanning local networks and detecting open ports.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Why I built it
&lt;/h2&gt;

&lt;p&gt;I didn’t want to just follow guides anymore.&lt;br&gt;
I wanted to understand how networking actually works — not just in theory, but in practice.&lt;/p&gt;

&lt;p&gt;So the idea was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Scan a local network → find active devices → check which ports are open.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At first, it sounded straightforward.&lt;br&gt;
In reality, it turned into a much more interesting challenge.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔧 What NetRadar does
&lt;/h2&gt;

&lt;p&gt;NetRadar is a CLI-based tool that allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;discover active hosts in a local network&lt;/li&gt;
&lt;li&gt;scan TCP ports (quick / deep modes)&lt;/li&gt;
&lt;li&gt;detect open ports using sockets&lt;/li&gt;
&lt;li&gt;map ports to known services (HTTP, SSH, RDP, etc.)&lt;/li&gt;
&lt;li&gt;validate user input (IP ranges, modes, etc.)&lt;/li&gt;
&lt;li&gt;export results to a structured JSON file&lt;/li&gt;
&lt;li&gt;display clean, readable output in the terminal&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🖥️ Example output
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;======= RESULTS =======

Host: 192.168.0.1
  80 (HTTP)
  443 (HTTPS)

Host: 192.168.0.5
  No open ports

======= SUMMARY =======
Active hosts: 2
Open ports found: 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📁 JSON output
&lt;/h2&gt;

&lt;p&gt;One of the things I focused on was making the output usable, not just visible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scan_info"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"base"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.0."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"range"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.0.1-192.168.0.10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"quick"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-12 20:15:33"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"open_ports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HTTP"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ How it works (simplified)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Host discovery
&lt;/h3&gt;

&lt;p&gt;I used &lt;code&gt;subprocess&lt;/code&gt; to ping IP addresses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;ping&lt;/span&gt; &lt;span class="na"&gt;-n &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;192&lt;/span&gt;.168.0.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the response is successful → the host is active.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Port scanning
&lt;/h3&gt;

&lt;p&gt;This was the most interesting part.&lt;/p&gt;

&lt;p&gt;I used Python sockets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AF_INET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SOCK_STREAM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;settimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect_ex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;host_ip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;result == 0&lt;/code&gt;, the port is open.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Data structure
&lt;/h3&gt;

&lt;p&gt;Instead of just printing results, I stored everything in dictionaries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ip&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.0.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;active&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;open_ports&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;port&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HTTP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This made it easy to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;print results&lt;/li&gt;
&lt;li&gt;export to JSON&lt;/li&gt;
&lt;li&gt;extend the project later&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 What I learned
&lt;/h2&gt;

&lt;p&gt;This project taught me a lot more than I expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how socket connections actually work&lt;/li&gt;
&lt;li&gt;how to design clean and usable data structures&lt;/li&gt;
&lt;li&gt;how to handle user input properly&lt;/li&gt;
&lt;li&gt;how to turn logic into a real CLI tool&lt;/li&gt;
&lt;li&gt;how small UX details (like output formatting) matter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest difference compared to tutorials was this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I had to solve real problems on my own.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 Challenges
&lt;/h2&gt;

&lt;p&gt;Some things were harder than I thought:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;handling invalid user input&lt;/li&gt;
&lt;li&gt;structuring the data cleanly&lt;/li&gt;
&lt;li&gt;making the output readable&lt;/li&gt;
&lt;li&gt;debugging network behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At one point, nothing worked and I had no idea why —&lt;br&gt;
but fixing those issues was the most valuable part.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 What’s next (NetRadar V2)
&lt;/h2&gt;

&lt;p&gt;I’m already working on improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multi-threading (faster scanning)&lt;/li&gt;
&lt;li&gt;better performance&lt;/li&gt;
&lt;li&gt;more advanced features&lt;/li&gt;
&lt;li&gt;possibly a simple GUI&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧭 Final thoughts
&lt;/h2&gt;

&lt;p&gt;This is not a huge project, but it’s the first one that actually feels like a &lt;strong&gt;real tool&lt;/strong&gt;, not just an exercise.&lt;/p&gt;

&lt;p&gt;And that changed the way I approach learning.&lt;/p&gt;

&lt;p&gt;Instead of just consuming content, I’m trying to build things that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;solve real problems&lt;/li&gt;
&lt;li&gt;can be improved over time&lt;/li&gt;
&lt;li&gt;actually work outside of tutorials&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you have any feedback or ideas — I’d love to hear them 👇&lt;/p&gt;

</description>
      <category>programming</category>
      <category>software</category>
      <category>python</category>
      <category>beginners</category>
    </item>
    <item>
      <title>DEVLOG #1 HOST DISCOVERY</title>
      <dc:creator>Radosław</dc:creator>
      <pubDate>Thu, 02 Apr 2026 14:42:04 +0000</pubDate>
      <link>https://dev.to/radoslawdev/devlog-1-host-discovery-3d5j</link>
      <guid>https://dev.to/radoslawdev/devlog-1-host-discovery-3d5j</guid>
      <description>&lt;p&gt;Worked a bit more on my network audit tool today.&lt;/p&gt;

&lt;p&gt;Added host discovery – scanning an IP range and checking which hosts are active using ping.&lt;br&gt;
Also changed how I store the data, so each host is now an object instead of just an IP. Makes it easier to build on later.&lt;/p&gt;

&lt;p&gt;Small step, but it finally starts to feel like an actual tool.&lt;/p&gt;

&lt;p&gt;Next step: port scanning.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>python</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Starting my devlog</title>
      <dc:creator>Radosław</dc:creator>
      <pubDate>Tue, 31 Mar 2026 13:42:57 +0000</pubDate>
      <link>https://dev.to/radoslawdev/starting-my-devlog-1hk3</link>
      <guid>https://dev.to/radoslawdev/starting-my-devlog-1hk3</guid>
      <description>&lt;p&gt;I decided to start sharing what I’m building instead of just keeping everything to myself.&lt;/p&gt;

&lt;p&gt;I’m an IT student and I’ve been learning Python, networking and a bit of web development. So far I’ve done a few small projects, but now I want to take things more seriously and actually document the process.&lt;/p&gt;

&lt;p&gt;Right now I’m starting a bigger project — a CLI network audit tool. The idea is to scan a local network, check active hosts and basic ports, and turn that into a readable report.&lt;/p&gt;

&lt;p&gt;Nothing crazy yet, but definitely a step up from what I’ve done before.&lt;/p&gt;

&lt;p&gt;I’ll be posting updates as I build it — what works, what doesn’t, and what I learn along the way.&lt;/p&gt;

&lt;p&gt;If you’re also learning or working on similar stuff, feel free to connect or share your thoughts.&lt;/p&gt;

&lt;p&gt;Let’s see where this goes.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/radoslaw-dev" rel="noopener noreferrer"&gt;https://github.com/radoslaw-dev&lt;/a&gt;&lt;br&gt;
Portfolio: &lt;a href="https://radoslaw-dev.github.io" rel="noopener noreferrer"&gt;https://radoslaw-dev.github.io&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/rados%C5%82aw-cis-60b03339b/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/rados%C5%82aw-cis-60b03339b/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
