<?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: ishant singh</title>
    <description>The latest articles on DEV Community by ishant singh (@ishantsinghdev).</description>
    <link>https://dev.to/ishantsinghdev</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%2F3378161%2F321a56e7-72db-469a-b2b0-f38e32bb974a.jpeg</url>
      <title>DEV Community: ishant singh</title>
      <link>https://dev.to/ishantsinghdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ishantsinghdev"/>
    <language>en</language>
    <item>
      <title>How to Get Your Public IP Address From the Command Line</title>
      <dc:creator>ishant singh</dc:creator>
      <pubDate>Sat, 17 Oct 2026 03:46:08 +0000</pubDate>
      <link>https://dev.to/ishantsinghdev/how-to-get-your-public-ip-address-from-the-command-line-kd8</link>
      <guid>https://dev.to/ishantsinghdev/how-to-get-your-public-ip-address-from-the-command-line-kd8</guid>
      <description>&lt;p&gt;The quickest way to get your public IP address from a terminal is &lt;code&gt;curl https://ipcomet.com&lt;/code&gt;. It prints your address and nothing else, so the output can go straight into a script. This guide shows the same one-liner on macOS, Linux and Windows, how to do it from Python and Node.js, how to get your location and ISP as JSON, and how to choose between IPv4 and IPv6.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-line answer
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://ipcomet.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output is a single line such as &lt;code&gt;203.0.113.7&lt;/code&gt;. The home page recognises command-line clients (curl, wget, PowerShell and similar) by their User-Agent and returns just the address instead of the web page. In scripts, use the explicit endpoint &lt;code&gt;https://ipcomet.com/api/ip&lt;/code&gt;, which always returns plain text.&lt;/p&gt;

&lt;h2&gt;
  
  
  macOS and Linux
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://ipcomet.com/api/ip
wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://ipcomet.com/api/ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;macOS includes curl but not wget. To keep the result in a shell variable, use &lt;code&gt;MYIP=$(curl -s https://ipcomet.com/api/ip)&lt;/code&gt;. The &lt;code&gt;-s&lt;/code&gt; flag hides curl's progress meter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Windows
&lt;/h2&gt;

&lt;p&gt;Windows 10 and 11 ship with curl, so &lt;code&gt;curl.exe https://ipcomet.com/api/ip&lt;/code&gt; works in both Command Prompt and PowerShell. Type &lt;code&gt;curl.exe&lt;/code&gt; rather than &lt;code&gt;curl&lt;/code&gt; in PowerShell, where &lt;code&gt;curl&lt;/code&gt; can be an alias for &lt;code&gt;Invoke-WebRequest&lt;/code&gt;. The native PowerShell way is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://ipcomet.com/api/ip&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Trim&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;
  
  
  Python
&lt;/h2&gt;

&lt;p&gt;With the &lt;code&gt;requests&lt;/code&gt; 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;requests&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;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://ipcomet.com/api/ip&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With only the standard library, set a User-Agent. Python's default one (&lt;code&gt;Python-urllib&lt;/code&gt;) is rejected by the bot protection in front of many sites, ipcomet included, which answer with a 403 error (Cloudflare error 1010):&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;urllib.request&lt;/span&gt;

&lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://ipcomet.com/api/ip&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&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;User-Agent&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;my-script/1.0&lt;/span&gt;&lt;span class="sh"&gt;"&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;urllib&lt;/span&gt;&lt;span class="p"&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;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&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="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  JavaScript and Node.js
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://ipcomet.com/api/ip&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;trim&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="nx"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works in Node.js 18 and later, which has &lt;code&gt;fetch&lt;/code&gt; built in, and in a browser page, because the endpoint allows cross-origin requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get your location and ISP as JSON
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://ipcomet.com/api/me
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response describes the connection that made the request. An example, with made-up values:&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;"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;"203.0.113.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mumbai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Maharashtra"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"country"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"India"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"countryCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"IN"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timezone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Asia/Kolkata"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"asn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"org"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example Broadband Ltd"&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;p&gt;The full response also has the postal code, latitude and longitude, and a few details about the connection (the edge location, the HTTP and TLS versions and the round-trip time). To pick out one field, pipe it through &lt;code&gt;jq&lt;/code&gt;: &lt;code&gt;curl -s https://ipcomet.com/api/me | jq -r .country&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To look up any other address, use &lt;code&gt;curl "https://ipcomet.com/api/lookup?q=8.8.8.8"&lt;/code&gt;. It returns the IP version, hostname, city, region, country, coordinates, timezone, ASN and network owner. Lookups are limited to 60 a minute per caller, and location data is approximate because it comes from network records, not GPS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Force IPv4 or IPv6
&lt;/h2&gt;

&lt;p&gt;If your connection has both, add &lt;code&gt;-4&lt;/code&gt; or &lt;code&gt;-6&lt;/code&gt; to curl: &lt;code&gt;curl -4 https://ipcomet.com&lt;/code&gt; forces IPv4, and &lt;code&gt;curl -6 https://ipcomet.com&lt;/code&gt; forces IPv6, which only works if your connection has IPv6.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other services you will see recommended
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;curl ifconfig.me&lt;/code&gt;, &lt;code&gt;curl icanhazip.com&lt;/code&gt;, &lt;code&gt;curl api.ipify.org&lt;/code&gt; and &lt;code&gt;curl ipinfo.io/ip&lt;/code&gt; are other free services that return a bare address in the same way.&lt;/li&gt;
&lt;li&gt;Without HTTP, you can ask a DNS resolver instead: &lt;code&gt;dig +short myip.opendns.com @resolver1.opendns.com&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They all report the address the internet sees, so they should agree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do two services show different IP addresses?
&lt;/h2&gt;

&lt;p&gt;If they differ, your router may be sharing traffic across two internet connections, or a VPN may be carrying only some of your traffic.&lt;/p&gt;

&lt;p&gt;These commands return your &lt;em&gt;public&lt;/em&gt; address, the one websites see. For the private address on your own network, such as 192.168.1.20, check your network settings or run &lt;code&gt;ipconfig&lt;/code&gt; on Windows and &lt;code&gt;ip addr&lt;/code&gt; on Linux.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits and privacy
&lt;/h2&gt;

&lt;p&gt;No key or sign-up is needed. Please keep requests reasonable: checking every few minutes is fine, but calling it in a tight loop may be rate limited. ipcomet does not store or log the addresses it sees. The &lt;a href="https://ipcomet.com/developers" rel="noopener noreferrer"&gt;free IP API page&lt;/a&gt; lists every endpoint with its exact rate limit.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This guide first appeared on &lt;a href="https://ipcomet.com/learn/get-public-ip-address-command-line" rel="noopener noreferrer"&gt;ipcomet&lt;/a&gt;, a free IP checker I maintain.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bash</category>
      <category>linux</category>
      <category>networking</category>
      <category>devops</category>
    </item>
    <item>
      <title>How We Built FreeCustom.Email — A Bold Step Toward Email Freedom.</title>
      <dc:creator>ishant singh</dc:creator>
      <pubDate>Tue, 22 Jul 2025 09:40:31 +0000</pubDate>
      <link>https://dev.to/ishantsinghdev/how-we-built-freecustomemail-a-bold-step-toward-email-freedom-33oe</link>
      <guid>https://dev.to/ishantsinghdev/how-we-built-freecustomemail-a-bold-step-toward-email-freedom-33oe</guid>
      <description>&lt;p&gt;With many products built on the same template, and extremely powerful forces in tech, a question crept into my mind: why can email not be as personal as the names we use on the platform?&lt;/p&gt;

&lt;p&gt;This query is what gave birth to what is now FreeCustom.Email a place to help email feel as though it were yours once again.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;🌱 The Frustration That Sparked an Idea&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
It began as what most stories about startups do; Frustration.&lt;/p&gt;

&lt;p&gt;Being a freelancer and a builder in the tech world, having an unpleasant email address has been big a problem: usually long, difficult to memorize where the email comes through free companies or, on custom domains through more advanced providers, costly to register (but need to configure). I desired an email personality that was easy, business like and mine — without the baggage.&lt;/p&gt;

&lt;p&gt;But when I looked around, everything was either:&lt;/p&gt;

&lt;p&gt;Too complicated to set up,&lt;br&gt;
Too expensive to maintain,&lt;br&gt;
Or just not flexible enough for real people.&lt;br&gt;
So I decided to change that.&lt;/p&gt;

&lt;p&gt;💡 &lt;a href="https://www.freecustom.email/" rel="noopener noreferrer"&gt;FreeCustom.Email&lt;/a&gt;: A Vision of Simplicity and Control&lt;br&gt;
&lt;a href="https://www.freecustom.email/&lt;br&gt;%0A![%20](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vbx9ec0eqzgtx2orhpzj.png)" rel="noopener noreferrer"&gt;FreeCustom.Email&lt;/a&gt; was born with a core mission:- “To give everyone the power to create their own professional email identity — instantly, affordably, and without technical headaches”.&lt;/p&gt;

&lt;p&gt;You can choose your own subdomain like &lt;a href="mailto:yourname@startuphero.email"&gt;yourname@startuphero.email&lt;/a&gt; or &lt;a href="mailto:contact@creativesoul.email"&gt;contact@creativesoul.email&lt;/a&gt;, without needing to buy or manage a full domain.&lt;/p&gt;

&lt;p&gt;No hidden fees. No shady data collection. No lock-in.&lt;/p&gt;

&lt;p&gt;Just email — your way.&lt;/p&gt;

&lt;p&gt;🌍 A Tool for Freelancers, Creators, Founders — and Everyone in Between&lt;br&gt;
What surprised us most? The diversity of our users.&lt;/p&gt;

&lt;p&gt;A solo founder in Germany using &lt;a href="mailto:founder@launchlabs.email"&gt;founder@launchlabs.email&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;An indie artist in India sending newsletters from &lt;a href="mailto:hello@canvasdreams.email"&gt;hello@canvasdreams.email&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A crypto dev who wanted privacy but professionalism.&lt;/p&gt;

&lt;p&gt;Our inboxes filled with support messages, but also with gratitude. People felt seen. They felt like their online identity finally had a home.&lt;/p&gt;

&lt;p&gt;🔮 What’s Next for FreeCustom.Email?&lt;br&gt;
We’re just getting started.&lt;/p&gt;

&lt;p&gt;More TLDs. More features. Closer integrations with productivity tools and calendar. Mobile first interface. And a duty to make sure that every time we build, we keep the center of it privacy and freedom. Non-alienating enough email identities to exhaust you? Or you simply desire a service that does not waste your time, as well as your information? Give us a look.&lt;/p&gt;

&lt;p&gt;It’s more than just an email address.&lt;/p&gt;

&lt;p&gt;It’s your identity, on your terms.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.freecustom.email/" rel="noopener noreferrer"&gt;FreeCustom.Email&lt;/a&gt; — Claim yours today.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>java</category>
      <category>rust</category>
    </item>
  </channel>
</rss>
