Never Ending Security

It starts all here

Take secret screenshots of the web-browser and/or virtualbox guest os directly from the command line in Linux

There are many instances when you want to take the screenshot of a webpage from within a php script or the command line. On ubuntu there are several ways to do it and most of them produce a webkit , gecko or khtml rendered screenshot image.

Some of the methods require X session to open a window and take screenshots. So VNC can be used to run in on servers for example.

1. wkhtmltopdf

wkhtmltopdf is a command line utility that converts html to pdf using webkit rendering engine.

Url :
http://code.google.com/p/wkhtmltopdf/

Install :

sudo apt-get install wkhtmltopdf

Usage :

The usage is very simple. Just run the command providing the url and name of the pdf file.

$ wkhtmltopdf www.google.com google.pdf
Loading page (1/2)
Printing pages (2/2)
Done

This will create the google.pdf file in the home directory.

2. wkhtmltoimage

The wkhtmltoimage utility shall take the screenshot of a given url, and save it as a png image. It uses the webkit rendering engine.

Url :
http://code.google.com/p/wkhtmltopdf/

Docs :
http://madalgo.au.dk/~jakobt/wkhtmltoxdoc/wkhtmltoimage_0.10.0_rc2-doc.html

Download :
http://code.google.com/p/wkhtmltopdf/downloads/list
Extract the archive.

Usage :

To use the wkthmltoimage utility simple run the command from terminal, giving the url and the name for the image file.

$ ./wkhtmltoimage-amd64 http://www.google.com google.png

It will create google.png in home directory with the screenshot of http://www.google.com

Other options :

wkhtmltoimage provides many options to customise the screenshot. Some examples are as follows :

Quality – Controls the quality/compression of the generation image. Default is 94

$ ./wkhtmltoimage-amd64 --quality 50 http://www.google.com google.png

Disable images

$ ./wkhtmltoimage-amd64 --no-images http://www.google.com google.png

Disable javascript

$ ./wkhtmltoimage-amd64 --disable-javascript http://www.google.com google.png

Crop the screenshot

$ ./wkhtmltoimage-amd64 --crop-h 300 --crop-w 300 --crop-x 0 --crop-y 0 http://www.google.com google.png

Advantages :
1. Can automatically determine the height of the page to take full page screenshots unlike most other utilities.

Disadvantages :
1. Fails many times due to unknown reasons with an error saying “Painter not active”.
2. Cannot render cufon fonts and flash animations. Sometimes it even fails in jquery animations which take long time to load.

3. cutycapt

Cutycapt is a utility to take the screenshot of a url, using the webkit rendering engine and save it to an image file.

Url

http://cutycapt.sourceforge.net/

Install

sudo apt-get install subversion libqt4-webkit libqt4-dev g++ cutycapt

Usage
To use cutycapt, simply run the command from the terminal, providing the url and the name for the output file.

$ cutycapt --url=http://www.google.com/ --out=google.png

It will create google.png file in home directory which would have the screenshot of http://www.google.com

4. khtml2png

khtml2png uses the konqueror rendering engine to create screenshots of web pages.

Download
http://khtml2png.sourceforge.net/index.php?page=download

Install

To install khtml2png, the program has to be compiled and build on the system.

1. sudo apt-get install kdelibs4-dev zlib1g-dev g++ cmake
2. Extract the khtml2png archive.
3. ./configure
4. make
5. sudo checkinstall (this will create a deb file and install it , so that it can easily uninstalled later).

Usage
To use khtml2png run the program from commandline providing the url and other options.

$ khtml2png2 --width 800 --height 600 http://www.google.com/ google.png
kbuildsycoca running...
DCOP Cleaning up dead connections.

This would create a google.png in home directory with the screenshot of http://www.google.com.

This method requires a running X session. To run it from VNC use as :
Start vnc server :

$ vncserver :12
New 'enlightened-desktop:12 (enlightened)' desktop is enlightened-desktop:12
Starting applications specified in /home/enlightened/.vnc/xstartup
Log file is /home/enlightened/.vnc/enlightened-desktop:12.log

Run the program in the vnc server :

$ DISPLAY=:12 khtml2png2 --width 1024 --height 768 http://www.google.com/ google.png
Xlib:  extension "XInputExtension" missing on display ":12".
Failed to get list of devices
Xlib:  extension "XInputExtension" missing on display ":12".
Failed to get list of devices
kbuildsycoca running...

Use with xvfb :

$ xvfb-run --server-args="-screen 0, 1024x768x24" khtml2png2 --width 800 --height 600 http://www.google.com/ google.png

5. PyWebShot

Url

http://www.coderholic.com/pywebshot-generate-website-thumbnails-using-python/

https://github.com/coderholic/PyWebShot

Pywebshot uses python bindings embedded mozilla ( http://www.mozilla.org/unix/gtk-embedding.html )

Install

1. sudo apt-get install python-gtkmozembed

2. Download pywebshot from https://github.com/coderholic/PyWebShot

Usage :

$ python pywebshot.py www.google.com -t 1024x768&lt;br /&gt;<br />Loading www.google.com... saved as www.google.com.png

It should create a http://www.google.com.png in the directory which has the screenshot of size 1024 x 768.

This method requires a running X session , since it opens a window to load the url and then save its screenshot.

So VNC can be used like this :

start vnc server :

$ vncserver :12
New 'enlightened-desktop:12 (enlightened)' desktop is enlightened-desktop:12
Starting applications specified in /home/enlightened/.vnc/xstartup
Log file is /home/enlightened/.vnc/enlightened-desktop:12.log

Run pywebshot :

$ DISPLAY=:12 python pywebshot.py www.google.com -t 1024x768
Loading www.google.com... saved as www.google.com.png

Advantages

1. Can succesfully render cufon fonts, complex/long loading jquery animations.

Disadvantages

1. Cannot automatically determine page height to take full page screenshot.

Workaround: If dimensions are available then the dimensions can be specified as the screensize and using such parameters with a virtual monitor can give full page screenshots.

2. Opens up an annoying browers every time on the desktop.
Workaround: Use xvfb.

6. python-webkit2png

Url :

1. http://www.blogs.uni-osnabrueck.de/rotapken/2008/12/03/create-screenshots-of-a-web-page-using-python-and-qtwebkit/

2. https://github.com/AdamN/python-webkit2png/

Install :

1. sudo apt-get install python-qt4 libqt4-webkit

2. Download package from github and extract the archive.

Usage :

$ python webkit2png.py -o google.png http://www.google.com/

It should create a google.png file in the directory with the screenshot of http://www.google.com

Use with xvfb :

On a webserver since Xorg is not running , xvfb can bed used to take the screenshot.

$ xvfb-run --server-args="-screen 0, 1024x768x24" python webkit2png.py -o google.png http://www.google.com/

Advantages

1. Can succesfully render cufon fonts, complex/long loading jquery animations.

Disadvantages

1. Fails at CSS3 fonts.

2. Cannot automatically determine page height to take full page screenshot.
Workaround: If dimensions are available then the dimensions can be specified as the screensize and using such parameters with a virtual monitor can give full page screenshots

3. Opens up an annoying browers every time on the desktop
Workaround: Use xvfb,vnc.

The above tools and techniques can be used on a webserver with a language like PHP.


Take screenshot of virtualbox guest os


Virtualbox

If you are a blogger, doing experiments with various oses on virtualbox and writing tutorials and posts, then you will need to take screenshots of the guest os things inside virtualbox.

For normal screenshot tasks a tool like shutter works very well. But with virtualbox you get the screenshot of the entire virtualbox window which has to be edited later and consumes time.

There is a quicker way to take a snapshot of the guest os inside virtualbox directly. However this has to be done from the commandline and is not available in the virtualbox gui.

The VBoxManage command is used to do this.

List the running vms

First list out the running virtual machines. You would be taking screenshot from one of the running machines.

$ VBoxManage list runningvms
"Centos 64bit" {5186c620-0656-4f03-8d01-6114d8fd12bb}

Now we get the uuid of the running vm. Here its centos.

Take screenshot as a png

Now lets take the screenshot of the running vm in png format. The format of the command is

$ VBoxManage controlvm vm_uuid screenshotpng /path/to/image

So use it like this

$ VBoxManage controlvm 5186c620-0656-4f03-8d01-6114d8fd12bb screenshotpng ~/centos_htop64.png

Simple! The screenshot is now saved in the home directory with the given name.
Now upload the image in your blog post and publish away.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s