Top spam sources

Currently my family gets somewhere between 6000-9000 spam emails per week, most of it addressed to three of my email addresses and two of my kids’ emails. Since I manage my own email (through the webhost for another personal website), I’ve put together filters to replace the built-in spam blocking system (which either lets too much spam through, or catches too much legitimate email). I save incoming spam to help me improve my filters, and currently have around 230,000 spam emails saved off.

Recently, while working on the IP filters, I got curious as to which IP addresses and ISPs were responsible for most of this spam. Some results:

All IPs with 100+ spam emails     (311 spam emails, Leaseweb USA)     (250 spam emails, Leaseweb USA)    (200 spam emails, Leaseweb USA)     (186 spam emails, Leaseweb USA)         (180 spam emails, Leaseweb USA)     (173 spam emails, Leaseweb USA)     (166 spam emails, Leaseweb USA)     (159 spam emails, Leaseweb USA)      (125 spam emails, Leaseweb USA)     (119 spam emails, Leaseweb USA)     (112 spam emails, Russia - Digital Network JSC)     (108 spam emails, Leaseweb USA)     (104 spam emails, Leaseweb USA)    (101 spam emails, Leaseweb USA)        (100 spam emails, Leaseweb USA)

IP/24 ranges (256 IP addresses) with the most spam (Top Ten = all over 900)    (3077 spam emails, Lanset America Corporation)    (2652 spam emails, Lanset America Corporation)  (1218 spam emails, Essential Services)   (1218 spam emails, Leaseweb USA)    (1137 spam emails, Krypt Technologies)    (1058 spam emails, Lanset America Corporation)    (1043 spam emails, Krypt Technologies)    (993 spam emails, Krypt Technologies)    (991 spam emails, Global Frag Networks)   (983 spam emails, Eonix Corporation)

ISPs with the most total spam (Top 25)

Lanset America Corporation                 8484
ColoCrossing/Colostore                     7214
Krypt Technologies                         7199
Global Frag Networks                       6226
Essential Services                         5965
Sagitta Residential (Denmark)              4215
Core Technology Services                   4128
Eonix Corporation                          3658
Limestone Networks                         3653    (+19 legit)
QuadraNet                                  3504    (+12 legit)
Access Integrated Technologies             3402
CubeMotion LLC                             3301
Leaseweb                                   3258
RIPE Network Coordination Center           3032
Isp4p (Germany)                            3032
GHOSTnet GmbH                              2558
Heymman Servers                            2425
Hostwinds LLC                              2172
Enzu Inc                                   2021
IP Interactive (Germany)                   2006
Psychz Networks                            1872
myLoc (Germany)                            1800
AnDilo (Sweden)                            1731
PSINet                                     1709   (+233 legit)
NFOrce Entertainment BV (Netherlands)      1692

A few notes and caveats are in order. First, I haven’t identified the source of all the spam – there are a lot of IPs where I haven’t checked what ISPs they belong to, though those tend to all be low-spam IPs in low-spam IP blocks. Second, some spam senders appear to forge one or two “Received:” headers, and I’m not entirely sure I’m fully correcting for that. Third, the sources I use don’t always agree on which ISP owns certain IP blocks. In general, though, I think the figures above should be fairly close.

Also, I haven’t checked the “big boys” like Comcast, Time Warner, etc. I get a lot of spam from their ISPs, but even more legitimate email, so even if one of them would have made the list, it doesn’t seem right to put them up with the primarily-spam ISPs.



Posted in Uncategorized | Leave a comment

“Won the Popular Vote”?

In the wake of the recent U.S. presidential election, over 3 million people have signed an online petition asking the Electors of the Electoral College to cast their ballots for Hillary Clinton instead of President-elect Donald Trump, and one of their arguments to support this request/demand is that she “won the popular vote”.

Excuse me?

Secretary Clinton did NOT win the popular vote. She simply has a plurality of the popular vote. And that is more than an academic distinction.

Let’s go with a little thought experiment here. Frank, Mary and John are running for club president, and the winner is selected by a vote of the 200 club members. Mary gets 92 votes, Frank gets 87 votes, and John gets 21 votes. Who won this “popular vote”?

Answer – we don’t have enough information to know (yes, it was a trick question). You cannot say who won a vote unless you know what the rules of the vote are.

Exhibit A. In this year’s U.S. Senate race in Alaska, Republican Lisa Murkowski got 44.3% of the vote to Libertarian Joe Miller’s 29.5%; the other candidates split the remaining 26.2%. Murkowski won the vote despite not having a majority; by Alaska’s election rules, her plurality was sufficient.

Exhibit B. In the U.S. Senate race in Louisiana, Republican John Kennedy led the 24 candidates with 25.0% of the vote, with Democrat Foster Campbell getting 17.9% and everyone else trailing behind them. By Louisiana’s election rules, Kennedy did not win, because he did not get a majority of the vote; the winner will be decided in a run-off between Kennedy and Campbell.

So – suppose we were using the popular vote to decide who would be President of the United States. As of the latest counts, Hillary Clinton has 47.7% and Donald Trump 47.3%, with the other candidates splitting the remaining 5.0%. Under Alaska rules, Clinton would win. Under Louisiana rules, we’d need a run-off between the two.

We don’t have a rule covering the popular vote in the U.S. Presidential election (since we don’t choose the President that way), so let’s look at the rules for the Electoral College. To win that vote, you must have a majority, not just a plurality. Suppose Clinton had held onto Michigan and Pennsylvania, and Alaska had gone Libertarian. That would have given Clinton 268 electors, Trump 267, and Johnson 3. The result would not have been a Clinton victory, but the election being dumped in the lap of Congress, with the House choosing the President and the Senate choosing the Vice-President (as provided for by the Twelfth Amendment).

And we’re not even considering the fact that if the President were to be selected based on the nationwide popular vote, the campaigns would have been conducted very differently and many people would have voted differently, undoubtedly resulting in a different distribution of the popular vote. Given the electoral dynamics this year, anyone who claims to know for certain how that vote would have come out is either lying or delusional.

So can we please bury this nonsensical idea that Clinton “won the popular vote”?

Posted in Politics | Leave a comment

Map Services Comparison

The various mapping services available on the Web have different capabilities. This post explores some of the differences in what each of the three best-known services can – and cannot – do. The majority of the figures below do not come from official documentation but from my own experimentation.

Basic Maps Google Maps Bing Maps Mapquest
Max zoom level * 21 20 18
  * Zoom levels are converted to the equivalent Google Maps parameter for easier comparison
Has pure satellite view (no labels) No Yes Yes
Has aerial view (at an angle) No Yes No
Has live traffic data Yes* Yes Yes
Has typical traffic (day/time) Yes* No No
  * Google Maps traffic data only available in directions, or via direct URL encoding
Has street-level view available Extensive Limited No
Directions Google Maps Bing Maps Mapquest
Max stops (manually entered) 10 25 26
Max stops (coded via URL) 24 or 25* 15 25
  * My tests showed Google Maps would return a route for 25 stops, but the map itself never loaded
Posted in Bing Maps, Google Maps, Mapquest, Online Maps | Tagged , , | Leave a comment

New Google Maps URLs – Photo Options

Unfortunately, it is pretty much impossible to create a photo URL for Maps without having already accessed the photo via the standard web interface. To illustrate, let’s look at the URL Maps provided for an image of the Pittsburgh skyline:,+PA/@40.410447,-79.999124,3a,75y,90t/data=!3m8!1e2!3m6!1s75481719!2e1!3e10!!7i1245!8i594!4m2!3m1!1s0x8834f16f48068503:0x8df915a15aa21b34!6m1!1e1

If we break down the data options, we see:

!3m8 – Map/display type, 8 elements
   +-!1e2 – Photo View
   +-!3m6 – Photo/image information, 3 elements
        +-!1s75481719 – Photo internal ID?
        +-!2e1 – Unknown (only 1 & 4 seen for photos)
        +-!3e10 – Unknown, varies
        +-! … – Image URL
        +-!7i1245 – Width in pixels?
        +-!8i594 – Height in pixels?

!4m2 – Map/route/display options, 2 elements
   +-!1e2 – Photo View
        +-!1s0x8834f16f48068503:0x8df915a15aa21b34 – Internal ID?

!6m1 – Unknown, 1 element
   +-!1e1 – Unknown

The shortest URL I’ve been able to reproduce this photo with is:!3m4!1e2!3m2!1s75481719!2e1

However, this still includes the (apparent) internal Maps ID for the photo, and I have found no way to exclude that piece of information and still get a photo (any photo). So, all this section will let you do is save a lot of space if sending a photo URL to a friend.

Return to New Google Maps URLs introduction

Posted in Google Maps, Online Maps | Tagged , | Leave a comment

New Google Maps URLs – Street View Options

In this post we will examine the easily settable options available for Street View. There aren’t very many.

First, let’s take a look at a minimalist example of a Street View URL (i.e., leaving out everything that Maps can fill in for itself). This example shows the fountain in Pittsburgh’s Point State Park as seen from North Shore Drive:,-80.013387,3a,75y,172.24h,90t/data=!3m1!1e1

The data element !1e1 under !3m# is what specifies Street View (as opposed to Map View, Satellite View, or Photo View). The meaning of the camera settings ,3a,75y,172.24h,90t# can be found back in the Map Positioning post, but to review: 3a is a fixed setting; #y is the focus or zoom factor (15 is max zoom in, 90 is max zoom out); #h is the compass direction with North = 0, East = 90; and #t is the camera angle with 0 = straight down, 180 = straight up, and 90 = horizontal.

If your URL also includes a place:,-80.013387,3a,75y,172.24h,90t/data=!3m1!1e1

The place will control the photos and additional street views available at the bottom of the screen; however, it will not affect what is displayed in Street View, or the map that is shown when you exit (which will be centered on the location of the Street View). This holds true even if you do something ridiculous like set your “place” in California but your camera in New York City.

If you attempt to specify a place without a MAP_POSITION:!3m1!1e1

Maps will probably go to Street View but display a black screen; you will have to exit Street View or click one of the photos at the bottom of the screen to get a map or view.

If the MAP_POSITION is not on a Street View spot, Maps will select the closest available Street View if it’s not too far away (my testing suggests a maximum distance of about 150 feet). If there is no Street View position within range, Maps will display a black screen.

If you specify a MAP_POSITION which uses zoom instead of camera settings, Maps will normally reset it to focus 15y, direction 0 (North), angle 90 (horizontal).

Return to New Google Maps URLs introduction

Posted in Google Maps, Online Maps | Tagged , | 3 Comments

New Google Maps URLs – Directions Options (Part 3)

In this post we’ll look at various other options for restricting the route selection – “avoidance” options, transit preferences, and arrival/departure time.

There are three things you can ask Maps to avoid when determining routes – highways, tolls, and ferries. The first two are only relevant for driving; the last is also relevant for walking (and possibly bicycling, I haven’t checked). The following elements control these options when placed inside the marker !4m#!4m#!2m#:

!1b1 = Avoid highways
!2b1 = Avoid tolls
!3b1 = Avoid ferries

These are cumulative; to avoid ferries and tolls, but not worry about highways, you could use:


For transit routes, you can specify a preference for routes with fewer stops, or routes with less walking distance between connection points. This is specified by the !4m#!4m#!2m#!4e# element:

!4e0 appears to mean “pick the best (shortest) route”
!4e1 seems to be the same as !4e0
!4e2 = prefer routes with the fewest transfers
!4e3 = prefer routes with the least walking

You can also specify a preference for the type of transit to take via the !4m#!4m#!2m#!5e# element:

!5e0 = prefer bus routes
!5e1 = prefer subway routes
!5e2 = prefer train routes
!5e3 = prefer tram/light rail routes

So, to specify that you prefer bus routes with fewer transfers for transit routes, you would use:


In both cases, these are preferences and not true restrictions; Maps will ignore them if there are no routes matching your criteria.

Arrival and departure times are most useful for transit directions, but they also have utility for driving. There are three elements under the !4m#!4m#!2m# marker that control this option:

!6e# indicates departure or arrival
– !6e0 = Depart at (default)
– !6e1 = Arrive by
!8j# specifies the time and day of travel as the number of seconds elapsed since midnight on the morning of January 1, 1970.

!7e# indicates the time zone used for calculating time.
– !7e2 = Calculate from 1/1/70 0:00 Local Time
Any other value (or omitting this marker) will calculate from 1/1/70 0:00 UTC.

If you specify an arrive by or depart at day/time, Maps will select transit routes to meet your criteria, and will provide times for driving routes based on the usual traffic for that time frame. If there is sufficient traffic data for the area, a time range may be provided instead of a single “typical” time.

Let’s suppose you are staying at the Embassy Suites-Crystal City across the river from Washington, D.C., and want to take public transit to the Smithsonian Museum of Natural History. The museum opens at 10AM, so you’d like to arrive at least 10 minutes early. Assuming your travel date is Monday, August 10, 2015, you would represent this as:

The time calculation runs as follows:

Days from 1/1/1970 to 1/1/2015 = 45*365 + 11 leap days = 16436 days
Days from 1/1/2015 to 8/10/2015 = 31+28+31+30+31+30+31+9 = 221 days
So, 1/1/1970 to 8/10/2015 = 16436 + 221 = 16657 days
16657 days = 16657*24*60*60 = 1439164800 seconds
9:50 AM = 9hrs 50min = 540+50 = 590 min = 590*60 = 35400 seconds
So, 8/10/2015 9:50 AM = 1439164800 + 35400 = 1439200200

Breaking down the data options:

!4m6 – Map/route/display contents, 6 elements
+-!4m5 – Directions options, 5 elements
+-!2m3 – Route options, 3 elements
|    |
|    +-!6e1 – Arrive by
|    |
|    +-!7e2 – Calculate from local time
|    |
|    +-!8j1439200200 – Aug 10, 2015, 9:50 AM
+-!3e3 – Transit routes only

Thanks to Ricardo (below) for figuring out what the !7e2 marker was actually doing.

While testing and verifying his conclusions, I noticed something interesting. If, while sitting in the Eastern Time Zone, I requested directions for a location in the Pacific Time Zone and omitted !7e2, the route was calculated for Pacific Time but the time displayed in the options was Eastern Time. So, for example, if I specified the number of seconds for 11:00AM on a given date, the route provided would assume I wanted 4:00AM local (Pacific) time, but the options box would say 7:00AM.

If I then clicked the right arrow in the Options to move the time later by 20 minutes, the local time used to determine the route(s) would be increased not to 4:20AM, but to 7:20AM.

Return to New Google Maps URLs introduction

Posted in Google Maps, Online Maps | Tagged , | 2 Comments

New Google Maps URLs – Directions Options (Part 2)

In this second post on URL options for Google Maps directions, we will look at specifying waypoints – locations which Maps will require a route to pass through – for both simple and multi-stop directions.

Let’s look at a simple set of directions – driving from Estes Park Resort in Estes Park, CO down to the Colorado School of Mines in Golden, CO. A simple URL for this would be:

Now, suppose you’ve never seen the Central City/Black Hawk casinos, so you decide to go a bit out of your way to drive past them on the way down. You select 39.80165,-105.49442 (the middle of the street between the casinos) as your waypoint. The resulting URL would look like this:!4m6!4m5!1m4!3m3!1m2!1d-105.49442!2d39.80165

The data options become a little easier to read if we break that section down:

!4m6 – Map/route/display contents, 6 elements
   +-!4m5 – Directions options, 5 elements
        +-!1m4 – Leg of route, 4 elements
             +-!3m3 – Waypoint, 3 elements
                  +-!1m2 – Waypoint location, 2 elements
                       +-!1d-105.49442 – Longitude
                       +-!2d39.80165 – Latitude

If you check back on the Data Options Reference page you will see that there are many elements that we have omitted, but Maps can supply them automatically so we don’t have to worry about them.

Now, suppose we are going to stop at the Gates Camp in Ward, CO first before continuing on to Golden via Central City. Our revised URL will look like:,Ward,CO/CO+School+of+Mines/data=!4m7!4m6!1m0!1m4!3m3!1m2!1d-105.49442!2d39.80165

Breaking down the data options section:

!4m7 – Map/route/display contents, 7 elements
   +-!4m6 – Directions options, 6 elements
        +-!1m0 – Leg of route, no elements
        +-!1m4 – Leg of route, 4 elements
             +-!3m3 – Waypoint, 3 elements
                  +-!1m2 – Waypoint location, 2 elements
                       +-!1d-105.49442 – Longitude
                       +-!2d39.80165 – Latitude

Note that we have an empty !1m element for the first leg. If we did not include that, Maps would treat our waypoint as belonging to the first leg of the route, resulting in a very different set of directions.

You can specify waypoints on more than one leg, as well as multiple waypoints within the same leg. So, let’s say you decide that on your way out of Estes Park you’re going to swing past Solitude Cabins to see if it looks like a nice place to stay for your next visit; you pick 40.36852,-105.49161 (the middle of Sketch Box Lane) as your waypoint. Then, after driving past the casinos, you want to swing through Idaho Springs and get on I-70 there to head back towards Golden; you use the I-70 on-ramp (39.74052,-105.51960) as your waypoint. Now we have the following URL:,Ward,CO/CO+School+of+Mines/data=!4m15!4m14!1m4!3m3!1m2!1d-105.49161!2d40.36852!1m8!3m3!1m2!1d-105.49442!2d39.80165!3m3!1m2!1d-105.51960!2d39.74052

Breaking down the data options section:

!4m15 – Map/route/display contents, 15 elements
   +-!4m14 – Directions options, 14 elements
        +-!1m4 – First leg of route, 4 elements
        |    |
        |    +-!3m3 – Waypoint, 3 elements
        |         |
        |         +-!1m2 – Waypoint location, 2 elements
        |              |
        |              +-!1d-105.49161 – Longitude
        |              +-!2d40.36852 – Latitude
        +-!1m8 – Second leg of route, 8 elements
             +-!3m3 – First waypoint, 3 elements
             |    |
             |    +-!1m2 – Waypoint location, 2 elements
             |         |
             |         +-!1d-105.49442 – Longitude
             |         +-!2d39.80165 – Latitude
             +-!3m3 – Second waypoint, 3 elements
                  +-!1m2 – Waypoint location, 2 elements
                       +-!1d-105.51960 – Longitude
                       +-!2d39.74052 – Latitude

Return to New Google Maps URLs introduction

Posted in Google Maps, Online Maps | Tagged , | Leave a comment