views:

1076

answers:

13

I'm looking for a series of 'tells' that indicate what a website was written in and/or what web framework is being used and maybe what web server software is used. Obvious examples would be the page extensions, http headers, page features, like VIEWSTATE, cookie names and such. Obviously, these tells could be faked or suppressed so I'm not looking for a foolproof way but some typical dead giveaways.

Edit: I'd love to have a definitive list of default web page extensions, cookie names and such. I thought of this question because I want to know what a web site with .do was written in (Java Struts, I think) -- but this is a question that comes up all the time.

Edit: Seems a real hard one to tell is Ruby on Rails.

It is assumed that an answer like .asp = Classic ASP means that by default .asp is served by Microsoft's ASP, but not all Classic ASP serves .asp pages and not all .asp pages are served by Classic ASP.

+1  A: 

Outside of the items you've listed (extenstions, cookie names, etc) there is little to nothing to determine what a site is written in. Anything can generate HTML, without you knowing the details of how that HTML was generating.

drowe
Yet there are many tell-tale signs available, and I think @Hafthor is hoping to get them cataloged.
Chris Noe
I disagree. He notes the 'obvious' being page extensions, which can be faked. As far as I can tell, there isn't a definitive source for getting this information, outside of the items he listed.
drowe
@Drowe page extensions are tell-tale signs. Just because they're not always available or occasionally misleading doesn't mean they are completely useless as an indicator. Just because MySpace says ColdFusion when they really mean ASP.NET doesn't mean every developer out there is re-mapping her IIS extensions ;)
Rex M
+2  A: 

If page suffixes have ".faces" then it's most likely Java using JSF.

Chris Noe
This is blatently incorrect. Any extension can be mapped to any page by any webserver. A better answer would be: If page suffixes have ".faces" then it is *probably* Java using SJF.
MetroidFan2002
If page suffixes have ".faces" then it's highly probable that is Java using JSF. Of course you can use another extension (just like a php can use .aspx suffix). His answer wasn't "If it's Java using JSF, then page suffixes have .faces", which will be blatently incorrect.
victor hugo
Hardly "blatantly incorrectly".. "Probably correct" would be more reasonable. They *could* map .faces to something else, but they would have to be insane (in which case, you probably don't want to know what they're using!)
dbr
Now that it's been edited, it is a valid statement. But stating something as fact that is not will get a downvote, because it is blatently incorrect.
MetroidFan2002
+2  A: 

You could also use this nifty site. It reports information about server uptime, what they're running and so on. This gives a little more insight into whats going on server-side.

As you can see SO runs on a Windows Stack, with server 2008 and IIS 7.

Depending on the site you will notice more information, some servers send back more detailed headers like so: http://uptime.netcraft.com/up/graph?site=slashdot.org

Clearly slashdot is running Perl (as most already know)

John T
The doesn't necessarily tell you _much_ about the application itself though, whether it is, say, PHP vs. .Net
drowe
Hence the use of the word "insight".
John T
I don't know, I tried some of my sites and they all came back as Microsoft IIS 7.0 running on Linux.....
EJB
An example of such? That's awkward.
John T
http://uptime.netcraft.com/up/graph?site=hilltowncdc.comIIS7.0 on Linux....
EJB
That's interesting, maybe something to do with running Mono or having multiple sites running in virtual machines. Nice find!
John T
The Linux/IIS combinations in the Netcraft stats are to do with load balancing proxies in front of the web server.
Adam Pope
A: 

As pointed out, there is no definitive answer. However, becoming familiar with frameworks and how they generate content will give you clues on what they are written in.

Having done Drupal work for the past year, I am fairly adept at figuring out if a site is drupal, based mostly on default class names, how html is generated, default paths etc..

After all, the point of a framework is smart (customizable) defaults that are often left as they are.

jskulski
So, how do you tell if it is a Drupal site?
Hafthor
Some sites don't remove CHANGELOG.txt or node so going to www.site.com/CHANGELOG.txt will give you the Druapl changelog. Views is a popular module and will spit classes like views-row views-field etc Panels is similar and drupal core uses a lot of 'node', 'node-324' tags in the HTML.Again, these tests result in plenty of false positives and true negatives.
jskulski
+1  A: 

This is a very broad question so I guess my answer is sort of vague but one thing I find useful is to look at the DOM element names and CSS class names used on the page.

If the page was generated by a framework such as Joomla, DotNetNuke, Drupal, Django, Wordpress.. and the list goes on.. there will be elements on the page that will always have very specific IDs and CSS classnames. That's how Themes work.

For instance, a Joomla site will have most of it's elements prefixed with "ja_". Also, the body element is given an Id of "bd". You will likely encounter an element that has the CSS class name "ja_moduletable". And the list goes on and on..

It's very similar for the other frameworks.

Miky Dinescu
+2  A: 

If page suffixes have ".do" then it's most likely Java using Struts.

This is the default configuration, and the suffix can be changed to anything the developer chooses. But most apps keep the default.

Chris Noe
Again, this is blatently incorrect.
MetroidFan2002
Now that it's been edited, it is a valid statement. But stating something as fact that is not will get a downvote, because it is blatently incorrect.
MetroidFan2002
i do not think that word means what you think it does
s_t_e_v_e
"blatant" : brazenly obvious; flagrant; tastelessly conspicuous."blatent" : subtle misspelling; hardly worth mentioning.
Chris Noe
For example, the comment is blatantly antagonistic, however the misspelling and word choice is flagrantly incorrect.
s_t_e_v_e
+1  A: 

Firebug under Firefox is a great tool for gathering clues.

  • Common page extensions:
    • .asp = classic ASP
    • .aspx = ASP.NET Webforms
    • .jsp = Java Server Pages
    • .cfm = ColdFusion
    • .pl = Perl
    • .shtml = static html w/ server-side includes (IIS or Apache)
  • SharePoint tell: credential demand on /_layouts/settings.aspx
  • DotNetNuke: lots of DNN ids in the HTML + dnn.control.initMenu in script
  • ASP.NET Webforms: __VIEWSTATE hidden field (yuck) and __doPostBack javascript
  • ASP.NET in general under IIS: HTTP Header "X-Powered-By: ASP.NET"
  • IIS7 HTTP Header: "Server: Microsoft-IIS/7.0"
  • ASP.NET MVC: HTTP Header "X-AspNetMvc-Version: 1.0"

http-stats also has lots of good info on http headers.

Anyone know of a way to determine hosting provider from IP and what that hosting provider supports?

Hafthor
Apache does .shtml just fine.
Paul Tomblin
thx Paul - updated.
Hafthor
+1  A: 

http://builtwith.com

Mehrdad Afshari
+4  A: 

I have got the perfect answer for you.

Goto Site : http://www.sitonomy.com/ and enter url it will give following details.

Affiliate Networks

Subscription

Programming Languages

Server Software

jalpesh
+1  A: 

On a number of sites, I've been able to determine the underlying framework or content management system by looking for the <meta name="generator"/> tag, e.g.

<meta name="generator" content="WordPress 2.0.2" />

On some other sites that didn't contain the <meta name="generator"/> tag, I was able to determine the underlying framework or content management system from JavaScript imports, e.g.

<script type="text/javascript" src="/misc/drupal.js?d">
las3rjock
+1  A: 

As has been mentioned, determining this from HTTP headers, file extensions and so on can be hit-and-miss.

By far the most reliable method is reading the site's blog..

Using stackoverflow as an example, you can tell exactly what it's written with by looking at this post

Another example is Facebook, they have a developer blog, and an open-source page with various projects they have created. Digg have a Github account. Slashdot is open-source

Another similar method is to look for job-postings by the company running the site - if they're primarily looking for Ruby on Rails developers, chances are that is the main language/framework they use. A final "low-tech" method is to simply email them and ask..

May not work for many sites, and it's hardly something you can write a script to determine, but it is reliable..

dbr
Excellent! +1. I have used job postings as a tell
Hafthor
+1  A: 

With Rails, you're usually looking for one of several signs, usually in the headers. Rails will often output an X-Runtime header, but other frameworks may as well. Session IDs for Rails are typically going to be 32 characters long and the cookie ID will usually begin with an '_' character, but again, that's not guaranteed. ETag will almost always be present in any recent Rails deployment and will usually be a 32 character MD5 hash surrounded by double quotes. Applications can and do override these defaults. A lot of Rails apps have a Status header being passed back. It's supposed to get processed and removed by the proxy server but often that doesn't happen.

Any of these server headers are going to mean a Ruby-based framework. Doesn't guarantee Rails though; could also be Merb or Sinatra or one of the other minor Ruby frameworks.

Telltale Passenger headers:

Server: Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.7l DAV/2 Phusion_Passenger/2.0.1
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.0.1

Telltale Mongrel headers:

Server: Mongrel 1.1.5

Telltale Webrick headers:

Server: WEBrick/1.3.1 (Ruby/1.8.6/2008-08-11)

Telltale Thin headers:

Server: thin 1.2.1 codename Asynctilicious Ultra Supreme

Rails deployments also commonly put Apache, nginx, or lighttpd in front of their application server instances. This proxying may or may not override the application server's Server headers. But if you see lighttpd or especially nginx, that's far more likely to be a Rails app on the backend.

Bob Aman
A: 

Extensions are not 100% reliable. Many people remap asp to php so that the pages appear with php extensions but are in fact asp.

Another example is myspace that appears to be running ColdFusion but is in fact running ASP.NET

Conrad