More from: Technical

Exhaust Ports

Picture of Chrysanthemum

júhuā (Chinese: 菊花) [Chrysanthemum]

There seems to be an upswing of hack attempts from one country in particular – oh, other “3rd world” nations half-heartedly try to hack, but one place in particular dishonors their ancestors with the clumsy incompetent behaviour of fools – trying to break into the homes of others who have done nothing to harm them. They disfigure their already disgraced face by attacking little Public Charities who have no money and unselfishly help old people learn skills and get jobs.

There is a nice little way to deal with those “júhuā” through IP Rules (blocking via .htaccess merely block web browser access, not for example FTP or SSH).

If you have cPanel  hosting, don’t really care if certain foreign countries have any access to your web sites, and have noticed an upswing in SQL injection or other hack attempts, you might consider using the IP Blocker functionality to deny access to all from any related IP ranges.
120.0.0.0/8 (and several others that come from the same place) can no longer access my sites. Blocking a range of IP addresses can be more effective than blocking just one IP address because the hackers typically switch addresses after hacking to get around blocking, but they normally must use another address from the same group.  I will watch for other fools and block them when they appear also.


Conky Weather


Changes in weather.gov formats for available weather information recently required me to revise my conky script. Conky can be installed from the Ubuntu / MINT repos or downloaded from github and documentation is on sourceforge or by the man page. This information is furnished AS IS – use it at your own risk. Most recent version of the GPL applies.

The following code is how I get my weather information directly from weather.gov and display up to date weather information for my area. The code for surface weather observations is found on the Weather.Gov web page for your zip code and the state / county codes for weather alerts is at the bottom of the page here.  My code is KFWA and my county is INC003. Replace these with the ones appropriate for your area.

The recommended pull time for your area is in the xml file that you get from weather.gov. Here is a sample of part of the lines in that file showing the suggested pick time and frequency:


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="latest_ob.xsl" type="text/xsl"?>
<current_observation version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.weather.gov/view/current_observatio.xsd">
<credit>NOAA's National Weather Service</credit>
<credit_URL>http://weather.gov/</credit_URL>
<image>
<url>http://weather.gov/images/xml_logo.gif</url>
<title>NOAA's National Weather Service</title>
<link>http://weather.gov</link>
</image>
<suggested_pickup>15 minutes after the hour</suggested_pickup>
<suggested_pickup_period>60</suggested_pickup_period>
<location>Fort Wayne International Airport, IN</location>
<station_id>KFWA</station_id>
<latitude>40.97251</latitude>
<longitude>-85.20637</longitude>
...

The part of my .conkyrc script dealing with weather is as follows:

${color FFAA00}WEATHER ${hr 2}$color${font Verdana:size=9}
#${execi 3600 curl -s w1.weather.gov/xml/current_obs/KFWA.xml > wwraw.txt}
#${execi 3600 wget -q --output-document="walerts.xml" http://alerts.weather.gov/cap/wwaatmget.php?x=INC003&y=0}
${color 00FF00}${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color 00FF00}${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color 888888}Wind: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color FFFF00}Humidity: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}% ${color}
${color 00FF00}Temperature: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color 888888}Dew Point: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color 888888}Pressure: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1} in Hg${color}${font}
${font Verdana:style=bold:size=10}Warnings:${font}${color}
${exec cat walerts.xml | sed -n '/\/p' | cut -d'>' -f2 | cut -d'<' -f1}

Notice the two lines which I have commented out with the pound # sign. These fetch the surface weather observations and weather alerts from weather.gov. They are commented out in my conky script because I fetch them instead using cron, 15 minutes after each hour,  the time recommended by weather.gov. They don’t HAVE to be in the script but I leave them there in case I need to refer back to them at some future date, such as if I accidently delete my weather fetching bash script. Edit your crontab in terminal by typing “crontab -e”.

# m h dom mon dow command
15 * * * * ./weather-fetch.sh

The .xml file provided by weather.gov says what time is recommended to pull. I try to avoid pinging weather.gov more frequently than needed as a matter of respect: the weather is updated once per hour so more frequent pulls achieve nothing useful and cost weather.gov in bandwidth.

To pull the weather information I use a bash script as follows. Remember a bash script must be “executable” for your login. Search on linux permits if you need more information. I can let cron call this once per hour, and it is also called through my .bash_profile when I log in.

#!/bin/bash
#pull weather from weather.gov

wget -q --output-document="wwraw.xml" http://w1.weather.gov/xml/current_obs/KFWA.xml
wget -q --output-document="walerts.xml" http://alerts.weather.gov/cap/wwaatmget.php?x=INC003&y=0

To have the script prevent excessive downloads, I use this complete bash script:

#!/bin/bash
#pull weather from weather.gov
#ONLY IF it has not been pulled recently
#weather is updated once per hour
# recommended time to pull is hour+15
# manually noted weather is updates about
# 54 minutes after the hour
#last_update: 20170826 JDN
#
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# define minimum time lapse before new pull is permitted
declare -i MINAGE=22
echo 'Min age' $MINAGE

# calculate time lapsed since last pull
if [ -f wwraw.xml ];
then
declare -i LAPSE=$(( ( $(date +%s) - $(stat wwraw.xml -c %Y)) / 60 ))
echo 'Lapse' $LAPSE
else
declare -i LAPSE=999
fi

# allow override of command line parameter #1 is --force
if [ -n "$1" ]; then declare -i FORCE=1; else declare -i FORCE=0; fi
echo force is $FORCE

# calculate if pull is permitted (boolean)
DOPULL=$(( $LAPSE >= $MINAGE ))
echo dopull is $DOPULL

# test time lapse vs. minimum time lapse to allow pull or override
# Check if file older
if [[ $(($DOPULL + $FORCE)) -gt 0 ]]; then
# debugging message output if pull was performed
echo "File was pulled $LAPSE minutes ago. Pulling new weather data"
# get surface observations
# file will have date / time from weather.gov
wget -q --output-document="wwraw.xml" http://w1.weather.gov/xml/current_obs/KFWA.xml
# mark file with current time to prevent hammering weather.gov
touch wwraw.xml
# get weather alerts
wget -q --output-document="walerts.xml" http://alerts.weather.gov/cap/wwaatmget.php?x=INC003&y=0
else
# debugging message output if pull was not performed
echo "File was pulled $LAPSE minutes ago. Ignoring request to pull again."
fi

#cleanup
unset FORCE
unset DOPULL
unset MINAGE
unset LAPSE
exit 0

How to configure Windows 10 to allow sign ons using credentials from Office 365

In my lab I have several computers which are used by many different community members, from job trainees in formal training at my agency to students and business persons just stopping by for a cup ‘o joe and to check their email. It is impractical to give every person their own account on every computer. However I wanted each student to be able to have their own file space and community members to work on their resumes and such without a need for special treatment.

Now, thanks to changes Microsoft provided in Windows 10, people can Readmore..


Conky in Linux Mint v18

locked-computer-cartoonConky changed between Linux Mint v17.1 and v18. While the transition requires mostly copy/paste new code to the top part of your .conkyrc file and leaving the bottom part as is, certain things no longer work.

For example, reporting the status of certain important background tasks, SSH & Apache2, stopped working because UpStart is no longer a part of Linux Mint v18 so “status ssh” no longer works: “Systemd” is now the thing. Don’t get me started on their choice to muddle the ethernet port names ‘to make them more predictable’. “Eth0” worked really well for me in my one-port only systems.

Back to the topic. Typing “service ssh status” will work as a normal user (you need no longer be root to use it), but the output takes up several lines, which I don’t want: I want a simple “Yes it is running” or “No it is not running”.

$ service ssh status
● ssh.service - OpenBSD Secure Shell server
 Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
 Active: inactive (dead)

Sep 10 20:57:00 pops systemd[1]: Starting OpenBSD Secure Shell server...
Sep 10 20:57:00 pops sshd[28133]: Server listening on 999.999.999.999 port 98765.
Sep 10 20:57:00 pops systemd[1]: Started OpenBSD Secure Shell server.
Sep 10 20:58:13 pops systemd[1]: Stopping OpenBSD Secure Shell server...
Sep 10 20:58:13 pops systemd[1]: Stopped OpenBSD Secure Shell server.
$

Here is how I fixed it.conkyrc-screencut

${color FFAA00}Process Status ${hr 2}$color
 SSH: ${exec service ssh status | sed -n '/Active:/p' | cut -c 11-27}
 Apache: ${exec service apache2 status | sed -n '/Active:/p' | cut -c 11-27}