<?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: Raghavvram Johnson</title>
    <description>The latest articles on DEV Community by Raghavvram Johnson (@raghavvram_johnson).</description>
    <link>https://dev.to/raghavvram_johnson</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2208003%2F4448756f-b64d-4a77-8fbb-6f3f0759cc1b.png</url>
      <title>DEV Community: Raghavvram Johnson</title>
      <link>https://dev.to/raghavvram_johnson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raghavvram_johnson"/>
    <language>en</language>
    <item>
      <title>Data handlers (CISSP)</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:47:19 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/data-handlers-cissp-4ep2</link>
      <guid>https://dev.to/raghavvram_johnson/data-handlers-cissp-4ep2</guid>
      <description>&lt;h1&gt;
  
  
  Data handlers
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. &lt;strong&gt;Data Subject&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; The individual (natural person) to whom the personal data relates. This is the person whose information is being collected, processed, or stored.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt; They are the rights-holder under privacy regulations (GDPR, CCPA, etc.). They can exercise rights like access, rectification, erasure, and portability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; &lt;strong&gt;Creation/Collection&lt;/strong&gt; — they are the source of data. They also appear at &lt;strong&gt;Disposal&lt;/strong&gt; when exercising the "right to be forgotten."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 2 (Asset Security) — understanding whose data you protect; Domain 1 (Security &amp;amp; Risk Management) — legal/regulatory compliance.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;strong&gt;Data Owner&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; A senior-level individual (often a business unit head or C-level executive) who has ultimate accountability for a specific dataset. They "own" the data from a business perspective.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Determines data classification and sensitivity levels&lt;/li&gt;
&lt;li&gt;Authorizes access and approves data sharing&lt;/li&gt;
&lt;li&gt;Ensures data quality and proper use&lt;/li&gt;
&lt;li&gt;Bears responsibility for data breaches within their domain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Present across &lt;strong&gt;all stages&lt;/strong&gt;, but most active at &lt;strong&gt;Creation/Collection&lt;/strong&gt; (classification decisions) and &lt;strong&gt;Use/Sharing&lt;/strong&gt; (access authorization).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 2 (Asset Security) — data classification and ownership; Domain 5 (Identity &amp;amp; Access Management) — access control decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;strong&gt;Data Auditor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; An independent party (internal or external) responsible for reviewing and verifying that data handling practices comply with policies, standards, and regulations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conducts audits of data access logs and processing activities&lt;/li&gt;
&lt;li&gt;Verifies compliance with data protection regulations&lt;/li&gt;
&lt;li&gt;Identifies control gaps and non-compliance&lt;/li&gt;
&lt;li&gt;Produces audit reports for management and regulators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Primarily active during &lt;strong&gt;Use/Processing&lt;/strong&gt; and &lt;strong&gt;Retention&lt;/strong&gt; stages, but audits can span the entire lifecycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 1 (Security &amp;amp; Risk Management) — governance, risk, and compliance; Domain 7 (Security Operations) — monitoring and auditing.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;strong&gt;Data Steward&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; Operational-level role responsible for day-to-day management and oversight of data assets on behalf of the Data Owner. They are the "hands-on" custodians.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implements data policies and standards set by the Data Owner&lt;/li&gt;
&lt;li&gt;Manages data quality, metadata, and documentation&lt;/li&gt;
&lt;li&gt;Handles data access requests and user provisioning&lt;/li&gt;
&lt;li&gt;Ensures data is properly labeled, stored, and maintained&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Active across &lt;strong&gt;all stages&lt;/strong&gt;, particularly &lt;strong&gt;Storage&lt;/strong&gt;, &lt;strong&gt;Use/Processing&lt;/strong&gt;, and &lt;strong&gt;Retention&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 2 (Asset Security) — data handling and maintenance; Domain 5 (Identity &amp;amp; Access Management) — operational access control.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;strong&gt;Data Controller&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; The entity (person, organization, or authority) that determines the &lt;strong&gt;purposes and means&lt;/strong&gt; of processing personal data. They make the "why" and "how" decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decides what data to collect and for what purpose&lt;/li&gt;
&lt;li&gt;Determines legal basis for processing (consent, contract, legitimate interest, etc.)&lt;/li&gt;
&lt;li&gt;Bears primary legal responsibility for data protection compliance&lt;/li&gt;
&lt;li&gt;Must maintain records of processing activities (ROPA)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; &lt;strong&gt;Creation/Collection&lt;/strong&gt; (deciding what to collect and why), &lt;strong&gt;Use/Processing&lt;/strong&gt; (determining how data is used), and &lt;strong&gt;Disposal&lt;/strong&gt; (retention schedules).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 1 (Security &amp;amp; Risk Management) — legal/regulatory compliance; Domain 2 (Asset Security) — data governance.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;strong&gt;Data Processor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; An entity that processes personal data &lt;strong&gt;on behalf of the Data Controller&lt;/strong&gt;. They do not decide the purpose or means — they execute the Controller's instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performs operations like storage, retrieval, analysis, or transmission&lt;/li&gt;
&lt;li&gt;Must process data only per the Controller's documented instructions&lt;/li&gt;
&lt;li&gt;Implements security measures to protect data&lt;/li&gt;
&lt;li&gt;Must notify the Controller of breaches&lt;/li&gt;
&lt;li&gt;Often requires a Data Processing Agreement (DPA)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Primarily &lt;strong&gt;Storage&lt;/strong&gt;, &lt;strong&gt;Use/Processing&lt;/strong&gt;, and sometimes &lt;strong&gt;Sharing&lt;/strong&gt; (if sub-processors are involved).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 2 (Asset Security) — third-party/vendor risk; Domain 1 (Security &amp;amp; Risk Management) — contractual and legal obligations.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;strong&gt;Data Custodian&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; The technical/IT professional responsible for the &lt;strong&gt;physical and logical protection&lt;/strong&gt; of data assets. Unlike the Data Steward (business-focused) or Data Owner (accountability-focused), the Custodian is &lt;strong&gt;hands-on technical&lt;/strong&gt; — they manage the systems, infrastructure, and controls that house the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implements and maintains security controls (encryption, backups, access controls)&lt;/li&gt;
&lt;li&gt;Manages storage infrastructure, databases, and cloud environments&lt;/li&gt;
&lt;li&gt;Performs backups, recovery, and disaster recovery operations&lt;/li&gt;
&lt;li&gt;Configures and monitors technical access controls (firewalls, permissions, DLP)&lt;/li&gt;
&lt;li&gt;Ensures data availability, integrity, and confidentiality at the technical layer&lt;/li&gt;
&lt;li&gt;Handles data migration, archiving, and secure deletion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Active across &lt;strong&gt;all stages&lt;/strong&gt;, but most critical during:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt; — managing where and how data resides&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use/Processing&lt;/strong&gt; — maintaining system availability and performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retention&lt;/strong&gt; — enforcing retention policies and archival&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disposal&lt;/strong&gt; — executing secure deletion, degaussing, or destruction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Domain 2 (Asset Security)&lt;/strong&gt; — data handling requirements, classification enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain 3 (Security Architecture &amp;amp; Engineering)&lt;/strong&gt; — designing secure storage and processing systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain 7 (Security Operations)&lt;/strong&gt; — backup, recovery, and monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain 5 (Identity &amp;amp; Access Management)&lt;/strong&gt; — technical access control implementation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How Data Custodian Differs from Data Steward
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Data Custodian&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Data Steward&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Technical protection&lt;/td&gt;
&lt;td&gt;Business/data quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Responsibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;How&lt;/em&gt; data is secured&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;What&lt;/em&gt; data means and how it's used&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tasks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Backups, encryption, patching&lt;/td&gt;
&lt;td&gt;Metadata, quality rules, access requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reports to&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IT/Security leadership&lt;/td&gt;
&lt;td&gt;Data Owner / Business unit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CISSP Domain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2, 3, 7&lt;/td&gt;
&lt;td&gt;2, 5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Simple analogy:&lt;/strong&gt; The &lt;strong&gt;Data Owner&lt;/strong&gt; is the homeowner, the &lt;strong&gt;Data Steward&lt;/strong&gt; is the property manager who handles tenant rules, and the &lt;strong&gt;Data Custodian&lt;/strong&gt; is the security guard and maintenance crew who physically protect and maintain the building.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Primary Responsibility&lt;/th&gt;
&lt;th&gt;Key Lifecycle Stage&lt;/th&gt;
&lt;th&gt;CISSP Domain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Subject&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rights-holder&lt;/td&gt;
&lt;td&gt;Creation/Collection&lt;/td&gt;
&lt;td&gt;1, 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Owner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Accountability &amp;amp; classification&lt;/td&gt;
&lt;td&gt;All (esp. Creation, Use)&lt;/td&gt;
&lt;td&gt;2, 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Auditor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compliance verification&lt;/td&gt;
&lt;td&gt;Use, Retention&lt;/td&gt;
&lt;td&gt;1, 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Steward&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Operational data management &amp;amp; quality&lt;/td&gt;
&lt;td&gt;All stages&lt;/td&gt;
&lt;td&gt;2, 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Custodian&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Technical protection &amp;amp; infrastructure&lt;/td&gt;
&lt;td&gt;Storage, Retention, Disposal&lt;/td&gt;
&lt;td&gt;2, 3, 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Controller&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Determines purpose &amp;amp; means&lt;/td&gt;
&lt;td&gt;Creation, Use, Disposal&lt;/td&gt;
&lt;td&gt;1, 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Processor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Executes processing on behalf&lt;/td&gt;
&lt;td&gt;Storage, Use, Sharing&lt;/td&gt;
&lt;td&gt;1, 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>cissp</category>
      <category>data</category>
      <category>handlers</category>
    </item>
    <item>
      <title>Apache Kafka</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:44:33 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/apache-kafka-1fo8</link>
      <guid>https://dev.to/raghavvram_johnson/apache-kafka-1fo8</guid>
      <description>&lt;p&gt;Apache Kafka is a powerful open-source distributed event streaming platform designed to handle real-time data feeds. It was originally developed by LinkedIn and is now maintained by the Apache Software Foundation. Kafka is widely used for building real-time data pipelines and streaming applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Core Concepts of Apache Kafka&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Topics&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Kafka topic is a category or feed name to which records are sent by producers.&lt;/li&gt;
&lt;li&gt;Topics are partitioned, meaning each topic can have multiple partitions to allow parallel processing.&lt;/li&gt;
&lt;li&gt;Example: A topic named &lt;code&gt;user_activity&lt;/code&gt; could store logs of user actions on a website.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Partitions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each topic is divided into partitions, which are ordered, immutable sequences of records.&lt;/li&gt;
&lt;li&gt;Partitions allow Kafka to scale horizontally by distributing data across multiple brokers.&lt;/li&gt;
&lt;li&gt;Each record in a partition is assigned a unique offset.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Producers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Producers are applications that send data to Kafka topics.&lt;/li&gt;
&lt;li&gt;They can specify which partition to send data to or let Kafka decide based on a partitioning strategy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consumers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consumers are applications that read data from Kafka topics.&lt;/li&gt;
&lt;li&gt;They can subscribe to one or more topics and process the data in real-time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Brokers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kafka brokers are servers that store data and serve client requests.&lt;/li&gt;
&lt;li&gt;A Kafka cluster consists of multiple brokers, and each broker is identified by a unique ID.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ZooKeeper&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ZooKeeper is used for managing and coordinating Kafka brokers.&lt;/li&gt;
&lt;li&gt;It handles tasks like leader election for partitions and storing metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Offsets&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An offset is a unique identifier for each record within a partition.&lt;/li&gt;
&lt;li&gt;Consumers use offsets to keep track of their position in the topic.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Replication&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kafka replicates data across multiple brokers to ensure fault tolerance.&lt;/li&gt;
&lt;li&gt;Each partition has one leader and multiple replicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Kafka APIs&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Producer API&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allows applications to send streams of data to topics.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consumer API&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enables applications to read streams of data from topics.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Streams API&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used for building real-time stream processing applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Connect API&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facilitates integration between Kafka and other systems like databases or file systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>apache</category>
      <category>kafka</category>
    </item>
    <item>
      <title>Bridged, NAT, and Host-Only in Vmware</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:42:10 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/bridged-nat-and-host-only-in-vmware-3k85</link>
      <guid>https://dev.to/raghavvram_johnson/bridged-nat-and-host-only-in-vmware-3k85</guid>
      <description>&lt;p&gt;VMware Workstation Pro provides three main default network modes (&lt;em&gt;Bridged, NAT, and Host-Only&lt;/em&gt;) along with custom and specialized networking options managed through virtual switches (&lt;code&gt;VMnet&lt;/code&gt; interfaces). &lt;/p&gt;

&lt;h2&gt;
  
  
  Main Network Modes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bridged Networking (&lt;code&gt;VMnet0&lt;/code&gt;)

&lt;ul&gt;
&lt;li&gt;How it works: Connects the virtual machine directly to your physical local area network (LAN) using the host's physical network adapter.&lt;/li&gt;
&lt;li&gt;IP address: Receives a distinct IP address directly from your physical router or DHCP server on the same subnet as your host.&lt;/li&gt;
&lt;li&gt;Best for: Running servers, testing network services, or making the VM appear as a separate physical machine on your network. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;NAT (Network Address Translation) Networking (&lt;code&gt;VMnet8&lt;/code&gt;)

&lt;ul&gt;
&lt;li&gt;How it works: Shares the host computer's IP address to access external networks or the internet through a built-in virtual NAT device and virtual DHCP server.&lt;/li&gt;
&lt;li&gt;IP address: Assigned a private IP address by VMware's internal DHCP server; inbound traffic is blocked unless port forwarding is configured.&lt;/li&gt;
&lt;li&gt;Best for: Safe internet access and general lab environments where the VM needs web access without exposing itself directly to the local network.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Host-Only Networking (&lt;code&gt;VMnet1&lt;/code&gt;)

&lt;ul&gt;
&lt;li&gt;How it works: Creates a completely isolated, private network container that links only the host and the virtual machines.&lt;/li&gt;
&lt;li&gt;IP address: Assigned by a virtual DHCP server on a closed internal subnet. The VM has no access to external networks or the internet.&lt;/li&gt;
&lt;li&gt;Best for: Secure sandboxing, offline testing, and practicing multi-machine setups like Active Directory or DNS. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Additional &amp;amp; Custom Options
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Custom Networks (&lt;code&gt;VMnet2&lt;/code&gt; through &lt;code&gt;VMnet255&lt;/code&gt; on Linux / up to 20 on Windows)

&lt;ul&gt;
&lt;li&gt;Allows you to use the Virtual Network Editor to build custom switch configurations (combining custom NAT, Bridged, or Host-Only rules) to isolate specific groups of VMs. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LAN Segments

&lt;ul&gt;
&lt;li&gt;Specialized private networks that operate without a DHCP server or host connectivity.&lt;/li&gt;
&lt;li&gt;Best for: Multi-tier application testing or isolated multi-node cluster simulations. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Advanced Features

&lt;ul&gt;
&lt;li&gt;Custom MAC address assignment, network throttling (simulating bandwidth limits or latency), and "Replicate physical network connection state" for mobile or Wi-Fi roaming laptops.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the comparison table for the three primary network modes in VMware Workstation Pro:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Bridged (&lt;code&gt;VMnet0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;NAT (&lt;code&gt;VMnet8&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Host-Only (&lt;code&gt;VMnet1&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IP Address Source&lt;/td&gt;
&lt;td&gt;Physical network router / DHCP&lt;/td&gt;
&lt;td&gt;VMware virtual DHCP&lt;/td&gt;
&lt;td&gt;VMware virtual DHCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subnet Location&lt;/td&gt;
&lt;td&gt;Same subnet as the host&lt;/td&gt;
&lt;td&gt;Separate private subnet&lt;/td&gt;
&lt;td&gt;Separate private subnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internet Access&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (via host IP)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Host Communication&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External Network Visibility&lt;/td&gt;
&lt;td&gt;Visible as a unique device&lt;/td&gt;
&lt;td&gt;Hidden behind host IP&lt;/td&gt;
&lt;td&gt;Completely hidden / Isolated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inbound Connections&lt;/td&gt;
&lt;td&gt;Allowed by default&lt;/td&gt;
&lt;td&gt;Blocked (requires port forwarding)&lt;/td&gt;
&lt;td&gt;Blocked from outside host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best Use Case&lt;/td&gt;
&lt;td&gt;Server hosting / Network scanning&lt;/td&gt;
&lt;td&gt;Safe web browsing / Software updates&lt;/td&gt;
&lt;td&gt;Malware sandboxing / Private labs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Advanced Connectivity Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Bridged (&lt;code&gt;VMnet0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;NAT (&lt;code&gt;VMnet8&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Host-Only (&lt;code&gt;VMnet1&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VM-to-VM Access&lt;/td&gt;
&lt;td&gt;Yes (If on the same physical network)&lt;/td&gt;
&lt;td&gt;Yes (If on the same &lt;code&gt;VMnet8&lt;/code&gt; switch)&lt;/td&gt;
&lt;td&gt;Yes (If on the same &lt;code&gt;VMnet1&lt;/code&gt; switch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access from another physical device (Same Network)&lt;/td&gt;
&lt;td&gt;Yes (Directly via VM's IP)&lt;/td&gt;
&lt;td&gt;No (Unless Port Forwarding is configured)&lt;/td&gt;
&lt;td&gt;No (Completely isolated from physical network)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access from the Internet&lt;/td&gt;
&lt;td&gt;Yes (Requires port forwarding on physical router)&lt;/td&gt;
&lt;td&gt;Yes (Requires double port forwarding: router $\rightarrow$ host $\rightarrow$ VM)&lt;/td&gt;
&lt;td&gt;No (Cannot be routed out)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VM Access to Host&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VM Access to Same Network Devices&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (Outbound traffic is NATed via host IP)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VM Access to the Internet&lt;/td&gt;
&lt;td&gt;Yes (Direct outbound)&lt;/td&gt;
&lt;td&gt;Yes (Outbound via host NAT)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Port Forwarding Possible&lt;/td&gt;
&lt;td&gt;N/A (Not needed; it has a direct IP)&lt;/td&gt;
&lt;td&gt;Yes (Built into VMware Virtual Network Editor)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reverse Connection / Reverse Shell Success&lt;/td&gt;
&lt;td&gt;Yes (To any device on the network or internet)&lt;/td&gt;
&lt;td&gt;Yes (To host, network, or internet via NAT)&lt;/td&gt;
&lt;td&gt;Host/Internal Only (Cannot reach external devices)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key Takeaways for Advanced Control
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reverse Connections: If you are testing reverse shells or callbacks in a security lab, NAT allows the VM to reach out to an external listening device seamlessly, while Host-Only blocks all outbound packets from leaving your local machine.&lt;/li&gt;
&lt;li&gt;The "Vice Versa" Rule: If a VM cannot see a network (like Host-Only looking at the internet), devices on that network cannot see it either. Outbound access usually dictates inbound capability unless explicit translation (NAT/Port Forwarding) is placed in between.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advanced Capabilities &amp;amp; Performance Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technical Metric / Feature&lt;/th&gt;
&lt;th&gt;Bridged (&lt;code&gt;VMnet0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;NAT (&lt;code&gt;VMnet8&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Host-Only (&lt;code&gt;VMnet1&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DHCP Management&lt;/td&gt;
&lt;td&gt;Handled by external physical router / network team&lt;/td&gt;
&lt;td&gt;Handled internally by VMware DHCP Service&lt;/td&gt;
&lt;td&gt;Handled internally by VMware DHCP Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bandwidth &amp;amp; Latency Throttling&lt;/td&gt;
&lt;td&gt;Limited by host NIC and physical switch infrastructure&lt;/td&gt;
&lt;td&gt;Controlled via VM Network Adapter advanced settings&lt;/td&gt;
&lt;td&gt;Controlled via VM Network Adapter advanced settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Promiscuous Mode / Packet Sniffing&lt;/td&gt;
&lt;td&gt;Supported (Can capture physical network broadcast traffic)&lt;/td&gt;
&lt;td&gt;Limited (Only captures traffic passing through the NAT gateway)&lt;/td&gt;
&lt;td&gt;Isolated (Only captures traffic within the private host vSwitch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MAC Address Handling&lt;/td&gt;
&lt;td&gt;Exposes VM MAC directly to the physical network switch&lt;/td&gt;
&lt;td&gt;Masked behind the host’s physical MAC address&lt;/td&gt;
&lt;td&gt;Never exposed to the physical network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP Address Exhaustion Risk&lt;/td&gt;
&lt;td&gt;High (Can exhaust company/home DHCP pool limits)&lt;/td&gt;
&lt;td&gt;None (Uses local private &lt;code&gt;192.168.x.x&lt;/code&gt; scope)&lt;/td&gt;
&lt;td&gt;None (Uses local private &lt;code&gt;192.168.x.x&lt;/code&gt; scope)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Physical Link State Replication&lt;/td&gt;
&lt;td&gt;Supported (VM drops connection if host unplugges Ethernet/Wi-Fi)&lt;/td&gt;
&lt;td&gt;N/A (Virtual switch link stays up even if host loses internet)&lt;/td&gt;
&lt;td&gt;N/A (Completely independent of physical link status)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VLAN Tagging (802.1Q)&lt;/td&gt;
&lt;td&gt;Supported (If host NIC driver allows tagging pass-through)&lt;/td&gt;
&lt;td&gt;Not Supported&lt;/td&gt;
&lt;td&gt;Not Supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Host System Resource Overhead&lt;/td&gt;
&lt;td&gt;Lowest (Packets pass straight to hardware layer)&lt;/td&gt;
&lt;td&gt;Highest (Host CPU translates packet headers via &lt;code&gt;vmnat.exe&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Low (Handled entirely in host kernel RAM/vSwitch)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Contextual Metrics Broken Down
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Security Risk &amp;amp; Network Isolation: In Bridged mode, a misconfigured firewall or a compromised VM exposes your entire physical corporation or home network to risk. NAT offers a default perimeter hardware firewall behavior, while Host-Only offers standard air-gapped sandboxing.&lt;/li&gt;
&lt;li&gt;Wi-Fi / Roaming Stability: Bridged mode frequently drops connections or fails to pull an IP address when your host laptop switches between Wi-Fi access points or moves to an 802.1X authenticated corporate network. NAT eliminates this problem because the VM only cares about its stable link to the host OS.&lt;/li&gt;
&lt;li&gt;Virtual Network Editor Customization: While &lt;code&gt;VMnet0&lt;/code&gt;, &lt;code&gt;VMnet8&lt;/code&gt;, and &lt;code&gt;VMnet1&lt;/code&gt; are default placeholders, you can change the underlying subnets, toggle the local DHCP servers on/off entirely, or restrict IP allocation ranges manually using the VMware Virtual Network Editor utility.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security &amp;amp; Threat Exposure Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Security Feature / Metric&lt;/th&gt;
&lt;th&gt;Bridged (&lt;code&gt;VMnet0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;NAT (&lt;code&gt;VMnet8&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Host-Only (&lt;code&gt;VMnet1&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Default Isolation Level&lt;/td&gt;
&lt;td&gt;None (Fully exposed to the host's physical network segment)&lt;/td&gt;
&lt;td&gt;Partial (Inbound blocked; outbound allowed via translation)&lt;/td&gt;
&lt;td&gt;High / Strict (Air-gapped from external networks; host-guest only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attack Surface Exposure&lt;/td&gt;
&lt;td&gt;Highest (VM can be directly targeted by any device on the physical LAN)&lt;/td&gt;
&lt;td&gt;Low (Hidden behind host IP; only targetable via explicit port forwards)&lt;/td&gt;
&lt;td&gt;Lowest (Invisible to the outside world; targetable only by the host or internal VMs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Malware Sandbox Suitability&lt;/td&gt;
&lt;td&gt;Dangerous (Malware can worm/spread to physical devices on your home/office network)&lt;/td&gt;
&lt;td&gt;Risky (Malware can dial out to Command &amp;amp; Control servers or scan the LAN via NAT)&lt;/td&gt;
&lt;td&gt;Excellent (Malware is safely contained within the local virtual switch infrastructure)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Sniffing Risk (Host Side)&lt;/td&gt;
&lt;td&gt;High (Host machine can easily sniff all VM traffic via local interfaces)&lt;/td&gt;
&lt;td&gt;Medium (Host can sniff traffic passing through the virtual gateway)&lt;/td&gt;
&lt;td&gt;Medium (Host can sniff traffic passing through the virtual gateway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Sniffing Risk (LAN Side)&lt;/td&gt;
&lt;td&gt;High (Physical network attackers can capture VM broadcast/multicast packets)&lt;/td&gt;
&lt;td&gt;Protected (Physical LAN attackers only see the host's traffic packets)&lt;/td&gt;
&lt;td&gt;Completely Immune (No data packets ever touch the physical medium)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP/MAC Spoofing Impact&lt;/td&gt;
&lt;td&gt;Severe (A malicious VM can disrupt or poison the physical network's ARP table)&lt;/td&gt;
&lt;td&gt;Contained (Spoofing only breaks or disrupts the internal &lt;code&gt;VMnet8&lt;/code&gt; virtual switch)&lt;/td&gt;
&lt;td&gt;Contained (Spoofing only breaks or disrupts the internal &lt;code&gt;VMnet1&lt;/code&gt; virtual switch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise Policy Compliance&lt;/td&gt;
&lt;td&gt;Often Violates (Connecting unauthorized VMs directly to corporate ports frequently trips rogue device alerts)&lt;/td&gt;
&lt;td&gt;Usually Allowed (Appears to corporate monitoring tools as standard, single-host traffic)&lt;/td&gt;
&lt;td&gt;Safe (Does not interact with corporate infrastructure, preserving compliance)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key Security Implementations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Inbound Hardware Barrier: NAT acts as a unidirectional firewall by default. External machines cannot initiate a handshake with a NAT VM unless you intentionally program a rule into the Virtual Network Editor.&lt;/li&gt;
&lt;li&gt;The Threat of Lateral Movement: If you run a vulnerable machine (like an unpatched Windows or Linux target for hacking practice) on Bridged mode, any infected machine on your actual living room or corporate Wi-Fi can attack it, and vice versa.&lt;/li&gt;
&lt;li&gt;True Air-Gapping: To simulate a completely isolated environment (e.g., analyzing ransomware), Host-Only is the baseline standard. To completely sever the host machine from the loop as well, you would transition the VM from Host-Only to an isolated LAN Segment.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vmware</category>
      <category>bridged</category>
      <category>nat</category>
      <category>hostonly</category>
    </item>
    <item>
      <title>Common JS vs ECMAScript Modules</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:39:50 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/common-js-vs-ecmascript-modules-3e09</link>
      <guid>https://dev.to/raghavvram_johnson/common-js-vs-ecmascript-modules-3e09</guid>
      <description>&lt;p&gt;&lt;strong&gt;CommonJS (CJS) and ECMAScript Modules (ESM) are the two main systems used in JavaScript to organize, import, and export code across files.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Key Differences&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS uses &lt;code&gt;require()&lt;/code&gt; and &lt;code&gt;module.exports&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;ESM uses &lt;code&gt;import&lt;/code&gt; and &lt;code&gt;export&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loading Mechanism:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS loads modules &lt;strong&gt;synchronously&lt;/strong&gt; (blocking) at runtime.&lt;/li&gt;
&lt;li&gt;ESM loads modules &lt;strong&gt;asynchronously&lt;/strong&gt; and supports top-level &lt;code&gt;await&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standardization:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS is the original module format built specifically for Node.js.&lt;/li&gt;
&lt;li&gt;ESM is the official W3C/ECMAScript standard supported natively in modern web browsers and Node.js.&lt;/li&gt;
&lt;li&gt;CommonJS does not support reliable &lt;strong&gt;tree-shaking&lt;/strong&gt; (dead code elimination) because exports are dynamic and not statically analyzable.&lt;/li&gt;
&lt;li&gt;ESM supports static analysis, allowing bundlers to drop unused code cleanly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Extensions &amp;amp; Config:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS uses &lt;code&gt;.cjs&lt;/code&gt; or default &lt;code&gt;.js&lt;/code&gt; (unless overridden).&lt;/li&gt;
&lt;li&gt;ESM uses &lt;code&gt;.mjs&lt;/code&gt;, or &lt;code&gt;.js&lt;/code&gt; when &lt;code&gt;"type": "module"&lt;/code&gt; is declared in &lt;code&gt;package.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Variables:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS provides direct access to &lt;code&gt;__dirname&lt;/code&gt; and &lt;code&gt;__filename&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;ESM does not have these globals; instead, it relies on &lt;code&gt;import.meta.url&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feature Comparison&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;CommonJS (CJS)&lt;/th&gt;
&lt;th&gt;ECMAScript Modules (ESM)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;require()&lt;/code&gt; / &lt;code&gt;module.exports&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;import&lt;/code&gt; / &lt;code&gt;export&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Loading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Synchronous (blocking)&lt;/td&gt;
&lt;td&gt;Asynchronous (non-blocking)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browser Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No (needs a bundler)&lt;/td&gt;
&lt;td&gt;Yes (native)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tree-Shaking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited / Not supported&lt;/td&gt;
&lt;td&gt;Fully supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default in Node.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (for &lt;code&gt;.js&lt;/code&gt; files)&lt;/td&gt;
&lt;td&gt;Yes (when configured)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Which Should You Use?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use ESM&lt;/strong&gt; as the default choice for all &lt;strong&gt;new projects&lt;/strong&gt;, modern libraries, and browser-based applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use CommonJS&lt;/strong&gt; primarily when maintaining legacy Node.js codebases, working with older tools that lack ESM support, or when migrating would cause high disruption.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>modules</category>
      <category>commonjs</category>
      <category>ecmascript</category>
    </item>
    <item>
      <title>🚀 Splunk Core deployment Guide: Docker Server &amp; Arch Linux Forwarder</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:38:28 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/splunk-core-deployment-guide-docker-server-arch-linux-forwarder-3mnh</link>
      <guid>https://dev.to/raghavvram_johnson/splunk-core-deployment-guide-docker-server-arch-linux-forwarder-3mnh</guid>
      <description>&lt;p&gt;This reference manual documents the complete architecture, configurations, and commands required to spin up a standalone Splunk indexer and securely ingest host operating system events.&lt;/p&gt;

&lt;p&gt;Part 1: Splunk Enterprise Server (Docker Compose)&lt;/p&gt;

&lt;p&gt;We deployed a permanent &lt;strong&gt;Splunk Free&lt;/strong&gt; environment on the &lt;code&gt;x86_64&lt;/code&gt; architecture. Using Docker volumes ensures all indexed data, search structures, and dashboards persist through restarts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deployment File Configuration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Create a dedicated working directory and save this file exactly as &lt;strong&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;splunk&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;splunk/splunk:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;splunk_free&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# Accept the mandatory Splunk licensing terms&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SPLUNK_START_ARGS=--accept-license&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SPLUNK_GENERAL_TERMS=--accept-sgt-current-at-splunk-com&lt;/span&gt;

      &lt;span class="c1"&gt;# Activates the perpetual 500MB/day Free license immediately&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SPLUNK_LICENSE_URI=Free&lt;/span&gt;

      &lt;span class="c1"&gt;# Required for internal initialization protocols&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SPLUNK_PASSWORD=YourSecurePassword123!&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8000:8000"&lt;/span&gt;   &lt;span class="c1"&gt;# Splunk Web UI Browser Console&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8088:8088"&lt;/span&gt;   &lt;span class="c1"&gt;# HTTP Event Collector (HEC) API Ingestion&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9997:9997"&lt;/span&gt;   &lt;span class="c1"&gt;# Splunk Indexer - Receiving port for Forwarders&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;splunk_etc:/opt/splunk/etc&lt;/span&gt;  &lt;span class="c1"&gt;# Stores configuration settings and custom apps&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;splunk_var:/opt/splunk/var&lt;/span&gt;  &lt;span class="c1"&gt;# Stores raw indexed log databases&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;splunk_etc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;splunk_var&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Operational Operations&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start Stack:&lt;/strong&gt; &lt;code&gt;docker compose up -d&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop Stack:&lt;/strong&gt; &lt;code&gt;docker compose down&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web UI URL:&lt;/strong&gt; Access &lt;strong&gt;&lt;code&gt;http://localhost:8000&lt;/code&gt;&lt;/strong&gt; (Free Mode automatically routes directly into the unauthenticated workspace).&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Server Configuration Constraint (Crucial Step)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before any external machine can communicate with this container, the indexer engine must be instructed to listen on its data pipeline port:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Forwarding and receiving&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Configure receiving&lt;/strong&gt; under the &lt;em&gt;Receive data&lt;/em&gt; column header.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;New Receiving Port&lt;/strong&gt;, enter &lt;strong&gt;&lt;code&gt;9997&lt;/code&gt;&lt;/strong&gt;, and click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Part 2: Host Node Log Ingestion (Arch Linux)&lt;/p&gt;

&lt;p&gt;Because Arch Linux relies natively on &lt;code&gt;systemd-journald&lt;/code&gt; instead of traditional structural text files (like &lt;code&gt;syslog&lt;/code&gt;), we implemented a direct, low-overhead native script architecture.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the Agent Binary via AUR&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Install the stable binary tracking from the Arch User Repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;paru &lt;span class="nt"&gt;-S&lt;/span&gt; splunkforwarder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Initial Setup Credentials&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Initialize the runtime parameters to establish the root control passwords:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /opt/splunkforwarder/bin/splunk start &lt;span class="nt"&gt;--accept-license&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Provide username &lt;code&gt;admin&lt;/code&gt; and create a distinct local agent password when prompted, then stop the session via &lt;code&gt;sudo /opt/splunkforwarder/bin/splunk stop&lt;/code&gt; to return control to systemd).&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Establish System Target Routing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Map the outbound forwarding path toward the container server. If the agent runs on the same underlying operating system as Docker, target the internal loopback:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /opt/splunkforwarder/bin/splunk add forward-server 127.0.0.1:9997 &lt;span class="nt"&gt;-auth&lt;/span&gt; admin:&amp;lt;YourForwarderPassword&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Overcome Arch Systemd Journal Security Boundaries&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;code&gt;splunk&lt;/code&gt; daemon user created by the package must be explicitly allowed to look inside binary operating system logging streams:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; systemd-journal splunk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Configure Native Journal Ingestion File&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rather than fighting text-file translation limits, manually specify a high-performance native &lt;code&gt;journald&lt;/code&gt; input receiver stream.&lt;/p&gt;

&lt;p&gt;Open the system configuration manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nvim /opt/splunkforwarder/etc/system/local/inputs.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Overwrite or append the exact parameters below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[default]&lt;/span&gt;
&lt;span class="py"&gt;host&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;arch-workstation&lt;/span&gt;

&lt;span class="nn"&gt;[journald://system_logs]&lt;/span&gt;
&lt;span class="py"&gt;disabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false&lt;/span&gt;
&lt;span class="py"&gt;index&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
&lt;span class="py"&gt;sourcetype&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;journald&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Permission Realignment &amp;amp; Service Activation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Force a complete runtime ownership sync on application directories and hand engine lifecycle tracking to the native scheduler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; splunk:splunk /opt/splunkforwarder
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 755 /opt/splunkforwarder
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; splunkforwarder.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Part 3: Telemetry Analysis&lt;/p&gt;

&lt;p&gt;To confirm telemetry streams are transmitting across isolation boundaries, load the Splunk Search Panel and run the following queries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify Infrastructure Logs Inbound:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index="main" sourcetype="journald"
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify Client-to-Server Health Interconnectivity:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index="_internal" sourcetype="splunkd"
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And Congratulations, you have successfully installed Splunk Free Edition&lt;/p&gt;

</description>
      <category>splunk</category>
      <category>docker</category>
      <category>arch</category>
      <category>linux</category>
    </item>
    <item>
      <title>🔐 Demystifying NIST SP 800-53</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Fri, 02 Oct 2026 12:53:48 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/demystifying-nist-sp-800-53-3m2</link>
      <guid>https://dev.to/raghavvram_johnson/demystifying-nist-sp-800-53-3m2</guid>
      <description>&lt;p&gt;If you’re getting started with &lt;strong&gt;Cybersecurity, GRC, Compliance, or Security Engineering&lt;/strong&gt;, you’ll eventually come across &lt;strong&gt;NIST SP 800-53&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But what exactly is it?&lt;/p&gt;

&lt;h3&gt;
  
  
  🏛️ What is NIST?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NIST&lt;/strong&gt; stands for the &lt;strong&gt;National Institute of Standards and Technology&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is a &lt;strong&gt;non-regulatory agency of the U.S. Department of Commerce&lt;/strong&gt;, founded in &lt;strong&gt;1901&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;NIST develops standards, guidelines, and frameworks that help organizations manage technology, security, privacy, and risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 What is NIST SP 800-53?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NIST Special Publication 800-53&lt;/strong&gt; is a comprehensive catalog of &lt;strong&gt;security and privacy controls&lt;/strong&gt; for information systems and organizations.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NIST 800-53 tells you what security and privacy controls you should consider implementing to manage risk.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is widely used as a foundation for building and assessing security programs, particularly in U.S. federal environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  📌 What does "Revision 5" mean?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Revision 5&lt;/strong&gt; is the fifth major revision of NIST SP 800-53.&lt;/p&gt;

&lt;p&gt;It significantly modernized the publication by:&lt;/p&gt;

&lt;p&gt;• Integrating &lt;strong&gt;privacy controls&lt;/strong&gt;&lt;br&gt;
• Introducing a more flexible, &lt;strong&gt;organization-centric&lt;/strong&gt; approach&lt;br&gt;
• Moving away from controls being tied strictly to specific technologies&lt;br&gt;
• Expanding coverage for modern cybersecurity and supply-chain risks&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 NIST SP 800-53 Rev. 5 — The Numbers
&lt;/h3&gt;

&lt;p&gt;The catalog contains:&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;20 Control Families&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;~1,200 total controls and control enhancements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔹 Approximately &lt;strong&gt;300 base controls&lt;/strong&gt;, with the remainder consisting largely of control enhancements.&lt;/p&gt;

&lt;p&gt;Impact-based baselines are also defined, with controls/enhancements allocated across:&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Low:&lt;/strong&gt; 149&lt;br&gt;
• &lt;strong&gt;Moderate:&lt;/strong&gt; 287&lt;br&gt;
• &lt;strong&gt;High:&lt;/strong&gt; 370&lt;/p&gt;

&lt;h3&gt;
  
  
  🧩 The 4-Level Hierarchy
&lt;/h3&gt;

&lt;p&gt;Think of NIST 800-53 like a tree:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 1 — The Catalog&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The complete NIST SP 800-53 Rev. 5 catalog containing the security and privacy controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 2 — Control Families&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The catalog is organized into &lt;strong&gt;20 families&lt;/strong&gt;, each covering a broad security or privacy domain.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;AC — Access Control&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;IR — Incident Response&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;SC — System and Communications Protection&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;SR — Supply Chain Risk Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 3 — Base Controls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are the foundational requirements within each family.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AC-2 — Account Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 4 — Control Enhancements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enhancements add additional requirements or rigor to a base control.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AC-2(1) — Automated System Account Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So you can think of it as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NIST SP 800-53&lt;/strong&gt;&lt;br&gt;
→ &lt;strong&gt;Control Family&lt;/strong&gt;&lt;br&gt;
→ &lt;strong&gt;Base Control&lt;/strong&gt;&lt;br&gt;
→ &lt;strong&gt;Control Enhancement&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you understand this hierarchy, navigating NIST 800-53 becomes much less intimidating.&lt;/p&gt;

&lt;p&gt;🔐 &lt;strong&gt;Cybersecurity isn't just about tools. It's also about understanding the controls, processes, and frameworks that define how security is managed.&lt;/strong&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnh2daum36gal94b6tdmb.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnh2daum36gal94b6tdmb.jpg" alt="Image explain the structure of a single NIST 800-53 control" width="799" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>nist80053</category>
      <category>nist</category>
      <category>infosec</category>
    </item>
    <item>
      <title>Simple TCP Server in Python</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Thu, 01 Oct 2026 16:33:35 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/simple-tcp-server-in-python-20k4</link>
      <guid>https://dev.to/raghavvram_johnson/simple-tcp-server-in-python-20k4</guid>
      <description>&lt;h2&gt;
  
  
  TCP Server
&lt;/h2&gt;

&lt;p&gt;Creating TCP servers in Python is just as easy as creating a client. You might want to use your own TCP server when writing command shells or crafting a proxy (both of which we’ll do later). Let’s start by creating a standard multi-threaded TCP server. Crank out the code below:&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;

&lt;span class="n"&gt;bind_ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;bind_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9999&lt;/span&gt;

&lt;span class="n"&gt;server&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;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;bind_ip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bind_port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[*] Listening on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;bind_ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;bind_port&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handle_client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_socket&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client_socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[*] Received: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;client_socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ACK!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;client_socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[*] Accepted connection from: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;client_handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;handle_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;
    &lt;span class="n"&gt;client_handler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To start off, we pass in the IP address and port we want the server to listen on.&lt;/li&gt;
&lt;li&gt;Next we tell the server to start listening with a maximum backlog of connections set to 5.&lt;/li&gt;
&lt;li&gt;We then put the server into its main loop, where it is waiting for an incoming connection.&lt;/li&gt;
&lt;li&gt;When a client connects, we receive the client socket into the client variable, and the remote connection details into the addr variable.&lt;/li&gt;
&lt;li&gt;We then create a new thread object that points to our handle_client function, and we pass it the client socket object as an argument.&lt;/li&gt;
&lt;li&gt;We then start the thread to handle the client connection, and our main server loop is ready to handle another incoming connection.&lt;/li&gt;
&lt;li&gt;The handle_client function performs the recv() and then sends a simple message back to the client.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;

&lt;span class="n"&gt;target_host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;127.0.01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;target_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9999&lt;/span&gt;

&lt;span class="n"&gt;client&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;target_host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAABBBCCC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you use the TCP client that we built earlier, you can send some test packets to the server and you should see output like the following:&lt;/p&gt;

&lt;p&gt;[&lt;em&gt;] Listening on 0.0.0.0:9999&lt;br&gt;
[&lt;/em&gt;] Accepted connection from: 127.0.0.1:62512&lt;br&gt;
[*] Received: ABCDE&lt;/p&gt;

&lt;p&gt;That’s it! Pretty simple.&lt;/p&gt;

</description>
      <category>tcp</category>
      <category>client</category>
      <category>server</category>
      <category>python</category>
    </item>
    <item>
      <title>Simple UDP Client in Python</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Thu, 01 Oct 2026 16:29:28 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/simple-udp-client-in-python-55dm</link>
      <guid>https://dev.to/raghavvram_johnson/simple-udp-client-in-python-55dm</guid>
      <description>&lt;p&gt;A Python UDP client is not much different than a TCP client; we need to make only two small changes to get it to send packets in UDP form.&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;

&lt;span class="n"&gt;target_host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;127.0.0.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;target_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;

&lt;span class="n"&gt;client&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_DGRAM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAABBBCCC&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="n"&gt;target_host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recvfrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;As you can see, we change the socket type to &lt;code&gt;SOCK_DGRAM&lt;/code&gt; when creating the socket object.&lt;/li&gt;
&lt;li&gt;The next step is to simply call &lt;code&gt;sendto()&lt;/code&gt;, passing in the data and the server you want to send the data to.&lt;/li&gt;
&lt;li&gt;Because UDP is a connectionless protocol, there is no call to &lt;code&gt;connect()&lt;/code&gt; beforehand.&lt;/li&gt;
&lt;li&gt;The last step is to call &lt;code&gt;recvfrom()&lt;/code&gt; to receive UDP data back.&lt;/li&gt;
&lt;li&gt;You will also notice that it returns both the data and the details of the remote host and port.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>udp</category>
      <category>client</category>
      <category>python</category>
      <category>sockets</category>
    </item>
    <item>
      <title>Simple TCP Client in Python</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Thu, 01 Oct 2026 16:00:12 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/simple-tcp-client-in-python-1k8</link>
      <guid>https://dev.to/raghavvram_johnson/simple-tcp-client-in-python-1k8</guid>
      <description>&lt;p&gt;This is a guide to write a quick simple TCP client in pure python.&lt;/p&gt;

&lt;p&gt;First of all, why would anyone need this ? &lt;br&gt;
Industry Servers dosent have tools like curl or wget, and most of the time have restricted network access, so downloading using the package manager isn't possible too.&lt;/p&gt;

&lt;p&gt;But most if not all of the time, you can find a version of python installed.&lt;/p&gt;

&lt;p&gt;So we will try to make a TCP client without any additional libraries, just using the buit in Sockets Library&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;

&lt;span class="n"&gt;target_host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;www.google.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;target_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;

&lt;span class="n"&gt;client&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;target_host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET / HTTP/1.1&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;Host: google.com&lt;/span&gt;&lt;span class="se"&gt;\r\n\r\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We first create a socket object with the &lt;code&gt;AF_INET&lt;/code&gt; and &lt;code&gt;SOCK_STREAM&lt;/code&gt; parameters. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;AF_INET&lt;/code&gt; parameter is saying we are going to use a standard IPv4 address or hostname, and &lt;code&gt;SOCK_STREAM&lt;/code&gt; indicates that this will be a TCP client. &lt;/li&gt;
&lt;li&gt;We then connect the client to the server and send it some data. &lt;/li&gt;
&lt;li&gt;The last step is to receive some data back and print out the response. &lt;/li&gt;
&lt;li&gt;This is the simplest form of a TCP client, but the one you will write most often.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the above code snippet, we are making some serious assumptions about sockets that you definitely want to be aware of. The first assumption is that our connection will always succeed, and the second is that the server is always expecting us to send data first (as opposed to servers that expect to send data to you first and await your response). Our third assumption is that the server will always send us data back in a timely fashion. We make these assumptions largely for simplicity’s sake. While programmers have varied opinions about how to deal with blocking sockets, exception-handling in sockets, and the like, it’s quite rare for pentesters to build these niceties into the quick-and-dirty tools for recon or exploitation work, so we’ll omit them.&lt;/p&gt;

</description>
      <category>tcp</category>
      <category>python</category>
      <category>client</category>
      <category>sockets</category>
    </item>
  </channel>
</rss>
