Mailing List Archive

ip_change_notifier - empty IP address
I run this little script to notify me when the IP changes. However at time to time the file: "old_ip.txt"
is being populated with an empty line "no IP address"

What could be causing it?


#!/bin/bash

# Replace "YOUR_EMAIL" with your actual email address
EMAIL="your_email@gmail.com"

# File to store the old IP address
IP_FILE="/home/fd/business/scripts/old_ip.txt"

# Read the old IP address from the file
OLD_IP=$(cat "$IP_FILE")

# Function to retrieve the IP address
get_ip_address() {
local ip_address
ip_address=$(curl -s https://ifconfig.me/ip)
echo "$ip_address"
}

# Query the API to get the current IP address
NEW_IP=$(curl -s https://api.ipify.org)

sleep 2

# Compare the new IP address with the old one
if [[ "$NEW_IP" != "$OLD_IP" ]]; then
echo "Your IP address has changed to $NEW_IP"

# Send an email notification
echo "New IP address: $NEW_IP" | mailto -s "IP address change" $EMAIL

# Allow overwriting of the file
set +o noclobber

# Update the old IP address in the file
# printf "%s" "$NEW_IP" > "$IP_FILE"
echo -n "$NEW_IP" > "$IP_FILE"

# Restore the noclobber option
set -o noclobber

else
echo "Your IP address is still $OLD_IP"
fi


--
Thelma
Re: ip_change_notifier - empty IP address [ In reply to ]
On Tue, 27 Jun 2023 10:34:22 -0600, thelma@sys-concept.com wrote:

> I run this little script to notify me when the IP changes. However at
> time to time the file: "old_ip.txt" is being populated with an empty
> line "no IP address"
>
> What could be causing it?
>
>
> #!/bin/bash
>
> # Replace "YOUR_EMAIL" with your actual email address
> EMAIL="your_email@gmail.com"
>
> # File to store the old IP address
> IP_FILE="/home/fd/business/scripts/old_ip.txt"
>
> # Read the old IP address from the file
> OLD_IP=$(cat "$IP_FILE")
>
> # Function to retrieve the IP address
> get_ip_address() {
> local ip_address
> ip_address=$(curl -s https://ifconfig.me/ip)
> echo "$ip_address"
> }
>
> # Query the API to get the current IP address
> NEW_IP=$(curl -s https://api.ipify.org)

I found this site very slow to respond. It could be timing out with an
empty result. OTOH the URL used in the get_ip_address function is rapid,
but you don't call that function.

>
> sleep 2
>
> # Compare the new IP address with the old one
> if [[ "$NEW_IP" != "$OLD_IP" ]]; then
> echo "Your IP address has changed to $NEW_IP"
>
> # Send an email notification
> echo "New IP address: $NEW_IP" | mailto -s "IP address change"
> $EMAIL
>
> # Allow overwriting of the file
> set +o noclobber
>
> # Update the old IP address in the file
> # printf "%s" "$NEW_IP" > "$IP_FILE"
> echo -n "$NEW_IP" > "$IP_FILE"
>
> # Restore the noclobber option
> set -o noclobber

You don't need to play with the noclobber option, just use >| for
redirection, which will always overwrite the file.

>
> else
> echo "Your IP address is still $OLD_IP"
> fi
>
>




--
Neil Bothwick

Linux like wigwam. No windows, no gates, Apache inside.
Re: ip_change_notifier - empty IP address [ In reply to ]
On 6/27/23 11:04, Neil Bothwick wrote:
> On Tue, 27 Jun 2023 10:34:22 -0600, thelma@sys-concept.com wrote:
>
>> I run this little script to notify me when the IP changes. However at
>> time to time the file: "old_ip.txt" is being populated with an empty
>> line "no IP address"
>>
>> What could be causing it?
>>
>>
>> #!/bin/bash
>>
>> # Replace "YOUR_EMAIL" with your actual email address
>> EMAIL="your_email@gmail.com"
>>
>> # File to store the old IP address
>> IP_FILE="/home/fd/business/scripts/old_ip.txt"
>>
>> # Read the old IP address from the file
>> OLD_IP=$(cat "$IP_FILE")
>>
>> # Function to retrieve the IP address
>> get_ip_address() {
>> local ip_address
>> ip_address=$(curl -s https://ifconfig.me/ip)
>> echo "$ip_address"
>> }
>>
>> # Query the API to get the current IP address
>> NEW_IP=$(curl -s https://api.ipify.org)
>
> I found this site very slow to respond. It could be timing out with an
> empty result. OTOH the URL used in the get_ip_address function is rapid,
> but you don't call that function.
>
>>
>> sleep 2

Yes, I notice it, it take upwards 10sec to get an IP and sometimes I get a timeout, I increases "sleep 15" hopefully it will help.

>>
>> # Compare the new IP address with the old one
>> if [[ "$NEW_IP" != "$OLD_IP" ]]; then
>> echo "Your IP address has changed to $NEW_IP"
>>
>> # Send an email notification
>> echo "New IP address: $NEW_IP" | mailto -s "IP address change"
>> $EMAIL
>>
>> # Allow overwriting of the file
>> set +o noclobber
>>
>> # Update the old IP address in the file
>> # printf "%s" "$NEW_IP" > "$IP_FILE"
>> echo -n "$NEW_IP" > "$IP_FILE"
>>
>> # Restore the noclobber option
>> set -o noclobber
>
> You don't need to play with the noclobber option, just use >| for
> redirection, which will always overwrite the file.
>

Thanks for the pointer.
>>
>> else
>> echo "Your IP address is still $OLD_IP"
>> fi
Re: ip_change_notifier - empty IP address [ In reply to ]
On Tue, 27 Jun 2023 11:48:16 -0600, thelma@sys-concept.com wrote:

> On 6/27/23 11:04, Neil Bothwick wrote:
> > On Tue, 27 Jun 2023 10:34:22 -0600, thelma@sys-concept.com wrote:
> >
> >> I run this little script to notify me when the IP changes. However
> >> at time to time the file: "old_ip.txt" is being populated with an
> >> empty line "no IP address"
> >>
> >> What could be causing it?
> >>
> >>
> >> #!/bin/bash
> >>
> >> # Replace "YOUR_EMAIL" with your actual email address
> >> EMAIL="your_email@gmail.com"
> >>
> >> # File to store the old IP address
> >> IP_FILE="/home/fd/business/scripts/old_ip.txt"
> >>
> >> # Read the old IP address from the file
> >> OLD_IP=$(cat "$IP_FILE")
> >>
> >> # Function to retrieve the IP address
> >> get_ip_address() {
> >> local ip_address
> >> ip_address=$(curl -s https://ifconfig.me/ip)
> >> echo "$ip_address"
> >> }
> >>
> >> # Query the API to get the current IP address
> >> NEW_IP=$(curl -s https://api.ipify.org)
> >
> > I found this site very slow to respond. It could be timing out with an
> > empty result. OTOH the URL used in the get_ip_address function is
> > rapid, but you don't call that function.
> >
> >>
> >> sleep 2
>
> Yes, I notice it, it take upwards 10sec to get an IP and sometimes I
> get a timeout, I increases "sleep 15" hopefully it will help.

It won't because the curl command is running synchronously. All
increasing the sleep does is make you wait longer after it fails. Why not
simply switch to the other service that seems to work more reliably?


--
Neil Bothwick

If someone with multiple personalities threatens to kill himself, is it
considered a hostage situation?
Re: ip_change_notifier - empty IP address [ In reply to ]
On 6/27/23 13:23, Neil Bothwick wrote:
> On Tue, 27 Jun 2023 11:48:16 -0600, thelma@sys-concept.com wrote:
>
>> On 6/27/23 11:04, Neil Bothwick wrote:
>>> On Tue, 27 Jun 2023 10:34:22 -0600, thelma@sys-concept.com wrote:
>>>
>>>> I run this little script to notify me when the IP changes. However
>>>> at time to time the file: "old_ip.txt" is being populated with an
>>>> empty line "no IP address"
>>>>
>>>> What could be causing it?
>>>>
>>>>
>>>> #!/bin/bash
>>>>
>>>> # Replace "YOUR_EMAIL" with your actual email address
>>>> EMAIL="your_email@gmail.com"
>>>>
>>>> # File to store the old IP address
>>>> IP_FILE="/home/fd/business/scripts/old_ip.txt"
>>>>
>>>> # Read the old IP address from the file
>>>> OLD_IP=$(cat "$IP_FILE")
>>>>
>>>> # Function to retrieve the IP address
>>>> get_ip_address() {
>>>> local ip_address
>>>> ip_address=$(curl -s https://ifconfig.me/ip)
>>>> echo "$ip_address"
>>>> }
>>>>
>>>> # Query the API to get the current IP address
>>>> NEW_IP=$(curl -s https://api.ipify.org)
>>>
>>> I found this site very slow to respond. It could be timing out with an
>>> empty result. OTOH the URL used in the get_ip_address function is
>>> rapid, but you don't call that function.
>>>
>>>>
>>>> sleep 2
>>
>> Yes, I notice it, it take upwards 10sec to get an IP and sometimes I
>> get a timeout, I increases "sleep 15" hopefully it will help.
>
> It won't because the curl command is running synchronously. All
> increasing the sleep does is make you wait longer after it fails. Why not
> simply switch to the other service that seems to work more reliably?

Hmm,... do you mean i run:
NEW_IP=$(curl -s https://ifconfig.me/ip)

I tried it. When the "curl -s https://ifconfig.me/ip" failed, showing empty IP
curl -s https://ifconfig.me/ip was empty as well.
Re: ip_change_notifier - empty IP address [ In reply to ]
Thelma

On 6/27/23 13:23, Neil Bothwick wrote:
> On Tue, 27 Jun 2023 11:48:16 -0600, thelma@sys-concept.com wrote:
>
>> On 6/27/23 11:04, Neil Bothwick wrote:
>>> On Tue, 27 Jun 2023 10:34:22 -0600, thelma@sys-concept.com wrote:
>>>
>>>> I run this little script to notify me when the IP changes. However
>>>> at time to time the file: "old_ip.txt" is being populated with an
>>>> empty line "no IP address"
>>>>
>>>> What could be causing it?
>>>>
>>>>
>>>> #!/bin/bash
>>>>
>>>> # Replace "YOUR_EMAIL" with your actual email address
>>>> EMAIL="your_email@gmail.com"
>>>>
>>>> # File to store the old IP address
>>>> IP_FILE="/home/fd/business/scripts/old_ip.txt"
>>>>
>>>> # Read the old IP address from the file
>>>> OLD_IP=$(cat "$IP_FILE")
>>>>
>>>> # Function to retrieve the IP address
>>>> get_ip_address() {
>>>> local ip_address
>>>> ip_address=$(curl -s https://ifconfig.me/ip)
>>>> echo "$ip_address"
>>>> }
>>>>
>>>> # Query the API to get the current IP address
>>>> NEW_IP=$(curl -s https://api.ipify.org)
>>>
>>> I found this site very slow to respond. It could be timing out with an
>>> empty result. OTOH the URL used in the get_ip_address function is
>>> rapid, but you don't call that function.
>>>
>>>>
>>>> sleep 2
>>
>> Yes, I notice it, it take upwards 10sec to get an IP and sometimes I
>> get a timeout, I increases "sleep 15" hopefully it will help.
>
> It won't because the curl command is running synchronously. All
> increasing the sleep does is make you wait longer after it fails. Why not
> simply switch to the other service that seems to work more reliably?

I think this is better version:
#!/bin/bash

# Replace "YOUR_EMAIL" with your actual email address
EMAIL="your_email@gmail.com"

# File to store the old IP address
IP_FILE="/home/fd/business/scripts/old_ip.txt"

# Read the old IP address from the file
OLD_IP=$(cat "$IP_FILE")

# Function to retrieve the IP address
get_ip_address() {
local ip_address
ip_address=$(wget -qO- ipinfo.io/ip)
echo "$ip_address"
}

# Query the API to get the current IP address
NEW_IP=$(get_ip_address)

# Retry if the IP address is empty
retry_count=0
while [[ -z "$NEW_IP" && $retry_count -lt 3 ]]; do
sleep 1
NEW_IP=$(get_ip_address)
((retry_count++))
done

# Compare the new IP address with the old one
if [[ "$NEW_IP" != "$OLD_IP" ]]; then
echo "Your IP address has changed to $NEW_IP"

# Send an email notification
echo "New IP address: $NEW_IP" | mailto -s "IP address change" $EMAIL

# Update the old IP address in the file
echo -n "$NEW_IP" >| "$IP_FILE"
else
echo "Your IP address is still $OLD_IP"
fi
Re: ip_change_notifier - empty IP address [ In reply to ]
On Tue, 27 Jun 2023 18:49:55 -0600, thelma@sys-concept.com wrote:

> # Query the API to get the current IP address
> NEW_IP=$(get_ip_address)
>
> # Retry if the IP address is empty
> retry_count=0
> while [[ -z "$NEW_IP" && $retry_count -lt 3 ]]; do
> sleep 1
> NEW_IP=$(get_ip_address)
> ((retry_count++))
> done

That's better, although I would use a longer sleep to allow for network
issues.


--
Neil Bothwick

Documentation: (n.) a novel sold with software, designed to entertain the
operator during episodes of bugs or glitches.
Re: ip_change_notifier - empty IP address [ In reply to ]
On Wednesday, June 28, 2023 5:05:25 P.M. AEST Neil Bothwick wrote:
> On Tue, 27 Jun 2023 18:49:55 -0600, thelma@sys-concept.com wrote:
> > # Query the API to get the current IP address
> > NEW_IP=$(get_ip_address)
> >
> > # Retry if the IP address is empty
> > retry_count=0
> > while [[ -z "$NEW_IP" && $retry_count -lt 3 ]]; do
> >
> > sleep 1
> > NEW_IP=$(get_ip_address)
> > ((retry_count++))
> >
> > done
>
> That's better, although I would use a longer sleep to allow for network
> issues.

# Retry if the IP address is empty
retry_count=0
while [[ -z "$NEW_IP" && $retry_count -lt 3 ]]; do

((retry_count++))
sleep $retry_count
NEW_IP=$(get_ip_address)

done


--
Reverend Paul Colquhoun, ULC. http://andor.dropbear.id.au/
Asking for technical help in newsgroups? Read this first:
http://catb.org/~esr/faqs/smart-questions.html#intro
Re: ip_change_notifier - empty IP address [ In reply to ]
Not quoting anything because I'm just making a general reply, to the
general problem that you're generally trying to solve. Generally.

You really should be using DNS for what you're trying to do, one way or
the other. Reverse DNS, when set up properly, will always return the
appropriate IP address for you. If this isn't achievable (I might
scoff at a few dollars a year for a domain but others might not), then
you should still be using DNS as a protocol, for both speed and
reliability reasons. OpenDNS provides this a free service.

dig +short myip.opendns.com @resolver1.opendns.com

If you still don't want to use DNS for whatever reason, there are
services that are designed for infrastructural reliability for this,
namely:

icanhazip.com [1]

Since 2021 icanhazip is hosted by Cloudflare, and regardless of how you
feel about CF as a company, the service is designed for speed and
reliabilty for this exact purpose.

1: https://major.io/p/a-new-future-for-icanhazip/
Re: ip_change_notifier - empty IP address [ In reply to ]
On 6/28/23 01:23, Paul Colquhoun wrote:
> On Wednesday, June 28, 2023 5:05:25 P.M. AEST Neil Bothwick wrote:
>> On Tue, 27 Jun 2023 18:49:55 -0600, thelma@sys-concept.com wrote:
>>> # Query the API to get the current IP address
>>> NEW_IP=$(get_ip_address)
>>>
>>> # Retry if the IP address is empty
>>> retry_count=0
>>> while [[ -z "$NEW_IP" && $retry_count -lt 3 ]]; do
>>>
>>> sleep 1
>>> NEW_IP=$(get_ip_address)
>>> ((retry_count++))
>>>
>>> done
>>
>> That's better, although I would use a longer sleep to allow for network
>> issues.
>
> # Retry if the IP address is empty
> retry_count=0
> while [[ -z "$NEW_IP" && $retry_count -lt 3 ]]; do
>
> ((retry_count++))
> sleep $retry_count
> NEW_IP=$(get_ip_address)
>
> done

Thank you, no more empty IP in txt file.