<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>sixserv blog[nks] &#187; Linux</title>
	<atom:link href="http://nks.sixserv.org/blog/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://nks.sixserv.org/blog</link>
	<description>welcome to teh #sixserv!</description>
	<lastBuildDate>Thu, 02 Feb 2012 17:23:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>opengl-background unter compiz</title>
		<link>http://nks.sixserv.org/blog/2008/09/19/opengl-background-unter-compiz/</link>
		<comments>http://nks.sixserv.org/blog/2008/09/19/opengl-background-unter-compiz/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 15:53:50 +0000</pubDate>
		<dc:creator>nks</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[compiz]]></category>
		<category><![CDATA[eye-candy]]></category>
		<category><![CDATA[mplayer]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<category><![CDATA[xwinwrap]]></category>

		<guid isPermaLink="false">http://sixserv.org/?p=103</guid>
		<description><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_linux.png" width="50" height="51" alt="" title="Linux" /><br/>Eine weitere nette Spielerei für Leute mit zu viel Ressourcen Ich hab sie nicht aber das ganze läuft auch auf einem 700Mhz Duron flüssig. Ihr benötigt &#8220;xscreensaver&#8221; (und auch das Paket &#8220;fireflies&#8221; falls ihr es wie auf den Screenshots haben wollt, wobei sich &#8220;pong&#8221; auch ganz gut macht) und &#8220;xwinwrap&#8221; (xwinwrap does teh magic) nks@hydra [...]]]></description>
			<content:encoded><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_linux.png" width="50" height="51" alt="" title="Linux" /><br/><p>Eine weitere nette Spielerei für Leute mit zu viel Ressourcen <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Ich hab sie nicht aber das ganze läuft auch auf einem 700Mhz Duron flüssig.</p>
<p>Ihr benötigt &#8220;xscreensaver&#8221; (und auch das Paket &#8220;fireflies&#8221; falls ihr es wie auf den Screenshots haben wollt, wobei sich &#8220;pong&#8221; auch ganz gut macht) und &#8220;xwinwrap&#8221; (xwinwrap does teh magic)</p>
<pre lang="bash">nks@hydra ~ $ nice -n 15 /usr/bin/xwinwrap -ni -argb -fs -s -st -sp -b -nf -- /usr/lib/misc/xscreensaver/fireflies -window-id WID</pre>
<p>Das ganze sieht dann so aus:</p>
<p><a href="http://sixserv.org/wp-content/uploads/2008/09/screenshot.jpeg" rel="lightbox[103]"><img class="alignnone size-thumbnail wp-image-106" title="screenshot" src="http://sixserv.org/wp-content/uploads/2008/09/screenshot.jpeg" alt="" width="150" height="120" /></a><a href="http://sixserv.org/wp-content/uploads/2008/09/screenshot2.jpeg" rel="lightbox[103]"><img class="alignnone size-medium wp-image-107" title="screenshot2" src="http://sixserv.org/wp-content/uploads/2008/09/screenshot2.jpeg" alt="" width="149" height="120" /></a><a href="http://sixserv.org/wp-content/uploads/2008/09/screenshot3.jpeg" rel="lightbox[103]"><img class="alignnone size-thumbnail wp-image-108" title="screenshot3" src="http://sixserv.org/wp-content/uploads/2008/09/screenshot3.jpeg" alt="" width="150" height="120" /> </a></p>
<p>Für mehr Infos:</p>
<ul>
<li><a href="http://swik.net/xwinwrap">http://swik.net/xwinwrap</a></li>
</ul>
<p>Man kann neben xscreensaver auch Videos als Hintergrund laufen lassen</p>
<p>nks</p>
]]></content:encoded>
			<wfw:commentRss>http://nks.sixserv.org/blog/2008/09/19/opengl-background-unter-compiz/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>software-kvm mit synergy</title>
		<link>http://nks.sixserv.org/blog/2008/09/19/software-kvm-mit-synergy/</link>
		<comments>http://nks.sixserv.org/blog/2008/09/19/software-kvm-mit-synergy/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 14:54:05 +0000</pubDate>
		<dc:creator>nks</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[eee]]></category>
		<category><![CDATA[fernbedienung]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[synergy]]></category>

		<guid isPermaLink="false">http://sixserv.org/?p=98</guid>
		<description><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_linux.png" width="50" height="51" alt="" title="Linux" /><br/>Mir ist gestern die Fernbedienung meiner Sourround-Anlage auf den Boden gefallen &#8211; jetzt ist sie unbrauchbar. Also dachte ich mir: &#8220;Hey, mach doch den eee-pc zu deiner neuen Fernbedienung!&#8221;. Also wenn ich im bett liege und die lautstärke regeln will, schnell per ssh auf den Rechner verbinden und alsamixer nutzen. Aber dafür is der eee [...]]]></description>
			<content:encoded><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_linux.png" width="50" height="51" alt="" title="Linux" /><br/><p>Mir ist gestern die Fernbedienung meiner Sourround-Anlage auf den Boden gefallen &#8211; jetzt ist sie unbrauchbar. Also dachte ich mir: &#8220;Hey, mach doch den eee-pc zu deiner neuen Fernbedienung!&#8221;.</p>
<p>Also wenn ich im bett liege und die lautstärke regeln will, schnell per ssh auf den Rechner verbinden und alsamixer nutzen. Aber dafür is der eee ja schon bisl overkill. Dann erinnerte ich mich an meine Experimente vor einem Jahr die beiden desktop-pcs miteinander zu verbinden.</p>
<p>Ich hatte es auch mit synergy versucht, aber es war ziemlich buggy. Aber die neue Version läuft wesentlich stabiler. Also schnell auf allen 3 boxen synergy gemerged und ab an die config:</p>
<pre lang="bash"># nks's synergy configuration file
# eeerr0r is the synergy-server
# infected and hydra are the clients

section: screens
infected:
hydra:
eeerr0r:
end

section: links
# larry is to the right of moe and curly is above moe
infected:
right = eeerr0r
eeerr0r:
left = infected
right = hydra
hydra:
left = eeerr0r
end
section: aliases
infected:
192.168.178.30
hydra:
192.168.178.32
eeerr0r:
192.168.178.25
end</pre>
<p>Das ganze dann auf dem System welches Tastatur und Maus bereitstellen soll unter &#8220;/etc/synergy.conf&#8221;<br />
und dann ab in die shell:</p>
<pre lang="bash">nks@eeerr0r ~ $ synergys -f --config /etc/synergy.conf</pre>
<pre lang="bash">nks@infected ~ $ synergyc -f eeerr0r</pre>
<pre lang="bash">nks@hydra ~ $ synergyc -f eeerr0r</pre>
<p>Und schon kann ich vom eee-pc aus beide Rechner kvm-style fernsteuern <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
das ganze funktioniert auch unter windows und mac os.</p>
<p>Besonders schön is das ganze in Kombination mit compiz weil man dann vom Bett/anywhere aus ranzoomen kann <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Informationen &amp; links:</p>
<ul>
<li><a href="http://synergy2.sourceforge.net/">http://synergy2.sourceforge.net/</a></li>
<li><a href="http://de.wikipedia.org/wiki/Synergy">http://de.wikipedia.org/wiki/Synergy</a></li>
</ul>
<p>ps: <a href="http://profile.myspace.com/index.cfm?fuseaction=user.viewprofile&amp;friendID=50002989">chase &amp; status</a> releasen demnächst ihr neues Album, zwar ziemlich die uk-kommerz schiene, aber &#8220;hurt you&#8221; und &#8220;pieces&#8221; laufen atm ja fast in jedem set, also man kann gespannt sein (wobei &#8220;hurt you&#8221; auch auf dem neuem Album ist)</p>
<p>pps:Ich hatte damals auch mit xdmx ruexperimentiert, hehe.. vll. probier ich demnächst auch wieder etwas damit rum, allerdings mit compiz etwas zu lahm, in Kombination mit <a href="http://chromium.sourceforge.net/">chromium</a> funktioniert es vll besser.</p>
<p>nks</p>
]]></content:encoded>
			<wfw:commentRss>http://nks.sixserv.org/blog/2008/09/19/software-kvm-mit-synergy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>kernel mode sockets part 2 (the clean way)</title>
		<link>http://nks.sixserv.org/blog/2008/08/30/kernel-mode-sockets-part-2-the-clean-way/</link>
		<comments>http://nks.sixserv.org/blog/2008/08/30/kernel-mode-sockets-part-2-the-clean-way/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 00:34:27 +0000</pubDate>
		<dc:creator>nks</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://sixserv.org/?p=10</guid>
		<description><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_linux.png" width="50" height="51" alt="" title="Linux" /><br/>Version 0.3 -  23.01.2009 Willkommen zu teil 2 der linux kernel mode socket Serie. Nun befassen wir uns mit einem sauberem weg der socketcalls vom kernel aus. Auch hierfür gibt es noch andere Wege. In einem der nächsten Teile bauen wir uns eine socket()-Funktion selber, aber nun zum sauberem socket Auch hier müssen wir wieder [...]]]></description>
			<content:encoded><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_linux.png" width="50" height="51" alt="" title="Linux" /><br/><p>Version 0.3 -  23.01.2009</p>
<p>Willkommen zu teil 2 der linux kernel mode socket Serie. Nun befassen wir uns mit einem sauberem weg der socketcalls vom kernel aus. Auch hierfür gibt es noch andere Wege. In einem der nächsten Teile bauen wir uns eine socket()-Funktion selber, aber nun zum sauberem socket <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Auch hier müssen wir wieder set_fs/get_fs (man kann sie auch weglassen, aber in diesem Fall garantiere ich für NICHTS, bzw das Modul lässt sich kompilieren aber die Funktion funktioniert im besten Fall nicht&#8230;) nutzen da file-Operationen im kernelmode nicht gestattet sind, der Zugriff auf sockets ist ein Dateizugriff. Die Funktion inet_addr müssen wir uns nicht extra schreiben, hab ich zwischenzeitlich herausgefunden in der &#8220;linux/inet.h&#8221; gibt es in_aton() <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Die Hauptschwierigkeit besteht in den neuen Strukturen <a href="http://docs.sun.com/app/docs/doc/819-2257/iovec-9s?a=view">iovec</a> und <a href="http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/structmsghdr.html">msghdr</a>. Die ich allerdings anhand von Kommentaren erklären werde, soweit wichtig, bzw unter den beiden links steht alles was man wissen muss (obwohl es nicht spezifisch um die linux Strukturen geht).</p>
<p>Ab an den Code:</p>
<pre lang="c">/*
 * lkm_clean_socket.c - nks
 */

#include
<linux/module.h>
#include
<linux/kernel.h>
#include
<linux/socket.h>
#include
<linux/net.h>
#include
<linux/in.h>
#include
<linux/inet.h>
#include <net/sock.h>
#include <asm/uaccess.h>

int init_module(void)
{
	struct socket *socket;
	struct sockaddr_in saddr;
	int errno;
	char buffer[1024];
	struct msghdr msg;
	struct iovec iov;
	mm_segment_t old_fs;

	printk(KERN_INFO "#sixserv/sixserv.org presents:\n");
	printk(KERN_INFO "simple &#038; clean kernel mode socket - nks\n");

	if ((errno = sock_create(PF_INET,SOCK_STREAM,IPPROTO_TCP,&#038;socket))<0)
	{
		printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
		printk(KERN_INFO "-- ERRNO: %d..\n",errno);
		return 0;
	}
	else
        {
		printk(KERN_INFO "++ Kernel Mode Socket is up ...\n");
		printk(KERN_INFO "++ ERRNO: %d..\n",errno);
        }

	saddr.sin_addr.s_addr = in_aton("79.140.33.153");
	saddr.sin_port = htons(80);
	saddr.sin_family = AF_INET;

	if ((errno = socket->ops->connect(socket,(struct sockaddr*)&#038;saddr,sizeof(saddr),0))<0)
	{
		printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
		printk(KERN_INFO "-- ERRNO: %d..\n",errno);
		return 0;
        }
        else
        {
		printk(KERN_INFO "++ Kernel Mode Socket is up an connected...\n");
		printk(KERN_INFO "++ ERRNO: %d..\n",errno);
        }

	iov.iov_base = "GET / HTTP/1.0\r\n\r\n";
	iov.iov_len = sizeof("GET / HTTP/1.0\r\n\r\n");

	msg.msg_iov = &iov;
	msg.msg_iovlen = 1;
	msg.msg_control = NULL;
	msg.msg_controllen = 0;
	msg.msg_name = NULL;
	msg.msg_namelen = 0;
	msg.msg_flags	= 0;

	old_fs = get_fs();
	set_fs(KERNEL_DS);	

	if ((errno = sock_sendmsg(socket,&#038;msg,sizeof("GET / HTTP/1.0\r\n\r\n")))<0)
	{
		printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
		printk(KERN_INFO "-- ERRNO: %d..\n",errno);
		set_fs(old_fs);
		return 0;
        }
        else
        {
                printk(KERN_INFO "++ Kernel Mode Socket is sending stuff...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);
		set_fs(old_fs);
        }	

	iov.iov_base = buffer;
	iov.iov_len = 1024;

	msg.msg_iov = &iov;
	msg.msg_iovlen = 1;
	msg.msg_control = NULL;
	msg.msg_name = NULL;
	msg.msg_namelen = 0;

	old_fs = get_fs();
	set_fs(KERNEL_DS);

	if ((errno = sock_recvmsg(socket,&#038;msg,1024,0))<0)
        {
                printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);
                set_fs(old_fs);
                return 0;
        }
        else
        {
                printk(KERN_INFO "++ Kernel Mode Socket is recieving stuff...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);
                printk(KERN_INFO "++ Recieved: %s..\n",buffer);
		set_fs(old_fs);

        }
	return 0;
}

void cleanup_module(void)
{
	printk(KERN_INFO "Goodbye world.\n");
}

MODULE_LICENSE("GPL");</pre>
<p>Ein weiteres mal passen wir unsere Makfeile an:</p>
<pre lang="bash">obj-m += lkm_clean_socket.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean</pre>
<p>Nach einem make ist das modul fertig und liegt unter dem namen "lkm_clean_socket.ko" im aktuellem verzeichnis.<br />
Wenn alles geklappt hat machen wir folgendes:</p>
<pre lang="bash"># modinfo lkm_clean_socket.ko
filename:       lkm_clean_socket.ko
license:        GPL
depends:
vermagic:       2.6.25-gentoo-r7 SMP mod_unload PENTIUM4
# insmod lkm_clean_socket.ko
# dmesg
....

++ Kernel Mode Socket is up ...
++ ERRNO: 0..
++ Kernel Mode Socket is up an connected...
++ ERRNO: 0..
++ Kernel Mode Socket is sending stuff...
++ ERRNO: 19..
++ Kernel Mode Socket is recieving stuff...
++ ERRNO: 1024..
++ Recieved: HTTP/1.1 200 OK
Date: Sat, 30 Aug 2008 00:18:58 GMT
Server: Apache
X-Powered-By: PHP/5.2.0-8+etch11
X-Pingback: http://sixserv.org/xmlrpc.php
Connection: close
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de-DE">
<head profile="http://gmpg.org/xfn/11"&gt;

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="welcome to teh #sixserv!" /&gt;
<meta name="generator" content="WordPress 2.6.1" /> <!-- leave this for stats please -->
<link href="http://sixserv.org/wp-content/themes/journalist/style.css" rel="stylesheet" type="text/css" media="screen" />
<link rel="alternate" type="application/rss+xml" title="sixserv blog RSS Feed" href="http://sixserv.org/feed/" />
<link rel="shortcut icon" type="image/x-png" href="http://sixserv.org/wp-content/the
....
# rmmod lkm_clean_socket.ko</pre>
<p>Wie man sehen kann ist unser buffer ein wenig zu klein, und die errnos kann man sich eigtl. auch sparen wenn kein Fehler auftritt.</p>
<p>Seid gespannt auf den nächsten teil der kernel mode Serie <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>nks</p>
<p>quellen:</p>
<blockquote>
<ul>
<li><a href="http://mail.nl.linux.org/kernelnewbies/2001-10/msg00079.html">http://mail.nl.linux.org/kernelnewbies/2001-10/msg00079.html</a></li>
<li><a href="http://docs.sun.com/app/docs/doc/819-2257/iovec-9s?a=view">http://docs.sun.com/app/docs/doc/819-2257/iovec-9s?a=view</a></li>
<li><a href="http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/structmsghdr.html">http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/structmsghdr.html</a></li>
<li><a href="http://qos.ittc.ku.edu/netlink/html/node7.html">http://qos.ittc.ku.edu/netlink/html/node7.html</a></li>
<li><a href="http://google.com/codesearch?hl=de&amp;q=show:ZmG4IsUMEpU:6VNQw9NOang:byMdVv2i9V8&amp;sa=N&amp;ct=rd&amp;cs_p=http://kernel.org/pub/linux/kernel/v2.4/linux-2.4.34.1.tar.bz2&amp;cs_f=linux-2.4.34.1/net/khttpd/sockets.c">linux-2.4.34.1/ net/ khttpd/*</a></li>
<li>include/linux/net.h</li>
<li>/usr/src/linux/*</li>
</ul>
</blockquote>
<p>ps:<br />
<a href="javascript:window.external.AddSearchProvider(&quot;http://www.cuil.com/static/plugin.xml&quot;);">cuil.com</a> und <a href="javascript:window.sidebar.addSearchEngine(&quot;http://www.metager2.de/mozilla/metager2.src&quot;,&quot;http://www.metager2.de/mozilla/metager2.gif&quot;,&quot;MetaGer2&quot;,&quot;deutschsprachige%20Meta-Suchmaschine&quot;);">metager2.de</a> lassen sich beide in die Suchleiste integrieren (klickt einfach auf den namen dann fragt euch FF). Nach einigem testen gefällt mir metager2 wesentlich besser weil es VIEL mehr findet. Allerdings gefällt mir die Aufmachung von cuil.com, ich sehe noch einiges an potenzial.</p>
<p>pps:<br />
Mal wieder ein musikalischer Tipp:<br />
<a href="http://www.myspace.com/blue_nine">http://www.myspace.com/blue_nine</a></p>
<p>edit: Unterschiede zu Version 0.1 haben nur mit der Rechtschreibung zu tun!</p>
]]></content:encoded>
			<wfw:commentRss>http://nks.sixserv.org/blog/2008/08/30/kernel-mode-sockets-part-2-the-clean-way/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>kernel mode sockets part 1 (the dirty way)</title>
		<link>http://nks.sixserv.org/blog/2008/08/29/kernel-mode-sockets-part-1-the-dirty-way/</link>
		<comments>http://nks.sixserv.org/blog/2008/08/29/kernel-mode-sockets-part-1-the-dirty-way/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 23:38:53 +0000</pubDate>
		<dc:creator>nks</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://sixserv.org/?p=8</guid>
		<description><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_linux.png" width="50" height="51" alt="" title="Linux" /><br/>Version 0.3 &#8211; 23.01.2009 Kernel mode sockets sind hoch-interessant. Im ersten teil befasse ich mich mit einer einfachen Implementierung eines ziemlich simplen kernel mode sockets, das ist nicht der Weg wie man es machen sollte allerdings hilft es erstmal dem grundsätzlichem Verständnis von lkm &#8211; also kernel modulen unter linux. Es ist natürlich trotzdem möglich [...]]]></description>
			<content:encoded><![CDATA[<img src="/wp-content/themes/6stheme/icons/icon_linux.png" width="50" height="51" alt="" title="Linux" /><br/><p>Version 0.3 &#8211; 23.01.2009</p>
<p>Kernel mode sockets sind hoch-interessant. Im ersten teil befasse ich mich mit einer einfachen Implementierung eines ziemlich simplen kernel mode sockets, das ist nicht der Weg wie man es machen sollte allerdings hilft es erstmal dem grundsätzlichem Verständnis von lkm &#8211; also kernel modulen unter linux.</p>
<p>Es ist natürlich trotzdem möglich diesen Code in einem rootkit zu verwenden etc. aber ich finde das dieser Code nichts in einem produktiven Umfeld zu suchen hat, man öffnet keine Dateien aus derm kernel mode.</p>
<p>Wir beginnen mit den Basics eines lkm.</p>
<p>Zu erst das klassische &#8220;Hello world.&#8221;:</p>
<pre lang="C">/*
*  lkm_hello_world.c
*/
#include
<linux/module.h>
#include
<linux/kernel.h>

int init_module(void)
{
printk(KERN_INFO "Hello world.\n");
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world.\n");

}</pre>
<p>Zum kompilieren des Moduls legen wir nun ein Makefile an:</p>
<pre lang="bash">obj-m += lkm_hello_world.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean</pre>
<p>Vielleicht hat der ein oder andere versucht die sys/socket.h (etc.) einzubinden, aber das geht nicht. man sollte das auch nicht machen da das user-mode includes sind. Also machen wir weiter, wir erstellen wir einen simplen (dirty) socket im kernel mode. Ich hab mich dazu entschieden das wir den socket über den syscall &#8220;socketcall()&#8221; erstellen. Um syscalls aus dem kernel aufrufen zu können gab es bis kernel 2.6.19 die syscall macros (für alle mit einem neuerem kernel habe ich einen kleinen header mit den macros hoch geladen), allerdings kann man eigtl keine syscalls vom kernel aus machen, damit wir das können müssen wir aus dem kernel-space Adressraum in den user space Adressraum, das geschieht hier per set_fs(). und schon kann man userspace calls ausführen.</p>
<pre lang="C">/*
*  lkm_dirty_socket.c - nks
*/
#include "syscall_macros.h" /* auskommentieren wenn die kernel version
unter 2.6.19/18 ist! */

#include
<linux/module.h>
#include
<linux/kernel.h>

#include
<linux/socket.h>
#include
<linux/net.h>
#include
<linux/in.h>
#include
<linux/ip.h>
#include
<linux/netdevice.h>

#include
<linux/init.h>
#include
<linux/syscalls.h>

#include
<linux/fcntl.h>
#include <asm/uaccess.h>
#include
<linux/unistd.h>

int errno; /* needed by socketcall() */

/*
int socketcall(int call, unsigned long *args);
wie wir sehen koennen werden der funktion socketcall() 2 call uebergeben,
also benutzen wir das _syscall2-makro:
*/
static inline _syscall2(int, socketcall, int, call, unsigned long *, args);
int init_module(void)
{
        unsigned long arg[3];
        int socket;
        mm_segment_t old_fs;
        struct sockaddr_in addr;
        struct sockaddr_in saddr;

        printk(KERN_INFO "#sixserv/sixserv.org presents:\n");
        printk(KERN_INFO "simple kernel mode socket - nks\n");

        old_fs = get_fs();

        /* die argumente fuer socketcall vorbereiten*/
        arg[0] = PF_INET;
        arg[1] = SOCK_STREAM;
        arg[2] = 0;

        set_fs(KERNEL_DS);
        if ((socket = socketcall(1, arg)) == -1) // SYS_SOCKET = 1
        {
                printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
                printk(KERN_INFO "-- ERRNO: %d..\n",errno);
                set_fs(old_fs);
                return 0;
        }
        else
        {
                printk(KERN_INFO "++ Kernel Mode Socket is up ...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);
        }

        return 0;
}

void cleanup_module(void)
{
        printk(KERN_INFO "Goodbye world.\n");
}</pre>
<p>nun muessen wir die Makefile an das neue modul anpassen</p>
<pre lang="bash">obj-m += lkm_dirty_socket.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean</pre>
<p>Nun können wir mit einem</p>
<pre lang="bash"># make
#insmod lkm_dirty_socket</pre>
<p>das Modul bauen und laden, mit dmesg sollte man dann die Meldungen sehen ob es geklappt hat sieht man wenn der folgende text in der debug Ausgabe erscheint:</p>
<pre lang="bash">++ Kernel Mode Socket is up …</pre>
<p>Aber nur ein socket alleine ist ja bekanntlich ziemlich langweilig <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Also verbinden wir uns mit einem http Server. Hierfür müssen wir noch ein paar Anpassungen an unserem bestehendem Code tätigen:</p>
<pre lang="C">/*
*  lkm_dirty_socket.c - nks
*/
#include "syscall_macros.h" /* auskommentieren wenn die kernel version unter 2.6.19/18 ist! */

#include
<linux/module.h>
#include
<linux/kernel.h>

#include
<linux/socket.h>
#include
<linux/net.h>
#include
<linux/in.h>
#include
<linux/ip.h>
#include
<linux/netdevice.h>

#include
<linux/init.h>
#include
<linux/syscalls.h>

#include
<linux/fcntl.h>
#include <asm/uaccess.h>
#include
<linux/unistd.h>
int errno; /* needed by socketcall() */

/*
int socketcall(int call, unsigned long *args);
wie wir sehen koennen werden der funktion socketcall() 2 parameter uebergeben,
also benutzen wir das _syscall2-makro:
*/
static inline _syscall2(int, socketcall, int, call, unsigned long *, args);
int init_module(void)
{
        unsigned long arg[3];
        int socket;
        mm_segment_t old_fs;
        struct sockaddr_in addr;
        struct sockaddr_in saddr;
        unsigned long arg1[3];
        unsigned long args[4];
        char buffer[1024];

        printk(KERN_INFO "#sixserv/sixserv.org presents:\n");
        printk(KERN_INFO "simple kernel mode socket - nks\n");

        old_fs = get_fs();

        arg[0] = PF_INET;
        arg[1] = SOCK_STREAM;
        arg[2] = 0;

        set_fs(KERNEL_DS);
        if ((socket = socketcall(1, arg)) == -1) // SYS_SOCKET = 1
        {
                printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
                printk(KERN_INFO "-- ERRNO: %d..\n",errno);
                set_fs(old_fs);
                return 0;
        }
        else
        {
                printk(KERN_INFO "++ Kernel Mode Socket is up ...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);
        }

        saddr.sin_addr.s_addr = inet_addr("79.140.33.153");
        saddr.sin_port = htons(80);
        saddr.sin_family = AF_INET;
        /* argumente fuer connect():
            int connect(int sockfd, struct sockaddr *serv_addr, int addrlen );
        */
        arg1[0] = socket;
        arg1[1] =  (unsigned long)&saddr;
        arg1[2] =  (unsigned long)sizeof(saddr);

         if ((socketcall(SYS_CONNECT, arg1)) == -1)
        {
                printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
                printk(KERN_INFO "-- ERRNO: %d..\n",errno);
                set_fs(old_fs);
                return 0;
        }
        else
        {
                printk(KERN_INFO "++ Kernel Mode Socket is up an connected...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);
        }

        /* argumente fuer send():
            send(int s, const void *buf, size_t len, int flags);
        */
        args[0] = socket;
        args[1] = "GET / HTTP/1.0\r\n\r\n";
        args[2] = strlen("GET / HTTP/1.0\r\n\r\n");
        args[3] = 0;

         if ((socketcall(SYS_SEND, args)) == -1)
        {
                printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
                printk(KERN_INFO "-- ERRNO: %d..\n",errno);
                set_fs(old_fs);
                return 0;
        }
        else
        {
                printk(KERN_INFO "++ Kernel Mode Socket is sending stuff...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);

        }

        /* argumente fuer recv():
            int recv(int s, void *buf, size_t len, int flags);
        */
        args[0] = socket;
        args[1] = (unsigned long) buffer;
        args[2] = 1024;
        args[3] = 0;

        if ((socketcall(SYS_RECV, args)) == -1)
        {
                printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);
                set_fs(old_fs);
                return 0;
        }
        else
        {
                printk(KERN_INFO "++ Kernel Mode Socket is recieving stuff...\n");
                printk(KERN_INFO "++ ERRNO: %d..\n",errno);
                printk(KERN_INFO "++ Recieved: %s..\n",buffer);

        }

       set_fs(old_fs);
       return 0;
}

void cleanup_module(void)
{
        printk(KERN_INFO "Goodbye world.\n");
}

unsigned int inet_addr(char *str)
{
        int a,b,c,d;
        char arr[4];
        sscanf(str,"%d.%d.%d.%d",&#038;a,&#038;b,&#038;c,&#038;d);
        arr[0] = a; arr[1] = b; arr[2] = c; arr[3] = d;
        return *(unsigned int*)arr;
}</pre>
<p>Wieder ist eine neue Funktion hinzugekommen inet_addr, aber viel interessanter sind die neuen socketcalls, beim lesen kann man anhand des call-Arguments gut sehen welche socket-Funktion nun aufgerufen wird. zur Übergabe der Parameter verwenden wir ein char array bzw zwei da recv und send jeweils 4 Argumente haben.</p>
<p>Die syscall macros hab ich für euch <a href="http://sixserv.org/wp-content/uploads/2008/08/syscall_macros.h">hochgeladen</a></p>
<p>quellen:</p>
<blockquote>
<ul>
<li><a href="http://www.linuxjournal.com/node/8110/print">http://www.linuxjournal.com/node/8110/print</a></li>
<li><a href="http://www.ibm.com/developerworks/linux/library/l-system-calls/">http://www.ibm.com/developerworks/linux/library/l-system-calls/</a></li>
<li><a href="http://www.ibm.com/developerworks/linux/library/l-lkm/">http://www.ibm.com/developerworks/linux/library/l-lkm/</a></li>
<li><a href="http://www.gnugeneration.com/mirrors/kernel-api/book1.html">http://www.gnugeneration.com/mirrors/kernel-api/book1.html</a></li>
<li><a href="http://www.tldp.org/LDP/lkmpg/2.6/html/">http://www.tldp.org/LDP/lkmpg/2.6/html/</a></li>
<li><a title="inet_addr code" href="http://www.ussg.iu.edu/hypermail/linux/kernel/0303.2/2007.html">http://www.ussg.iu.edu/hypermail/linux/kernel/0303.2/2007.html</a> (inet_addr())<a title="inet_addr code" href="http://www.ussg.iu.edu/hypermail/linux/kernel/0303.2/2007.html"><br />
</a></li>
<li><a href="http://google.com/codesearch/">http://google.com/codesearch/</a></li>
<li><a href="http://lkml.org">http://lkml.org</a></li>
<li><a href="http://kerneltrap.org">http://kerneltrap.org</a></li>
<li>/usr/src/linux/*</li>
<li><a href="http://sixserv.org/wp-content/uploads/2008/08/syscall_macros.h">syscall_macros.h</a></li>
</ul>
</blockquote>
<p>Bei fragen etc. kommt doch einfach ins irc (#nullserv/#sixserv im freenode)</p>
<p>nks</p>
<p>ps:<br />
benutzt öfters mal google-alternativen.. <img src='http://nks.sixserv.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />   <a href="http://cuil.com">http://cuil.com</a> oder <a href="http://metager2.de">http://metager2.de</a></p>
<p>pps:<br />
chillig, und wie ich finde sehr geil: <a href="http://www.myspace.com/17thboulevard">http://www.myspace.com/17thboulevard</a><br />
bin gespannt auf das album&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://nks.sixserv.org/blog/2008/08/29/kernel-mode-sockets-part-1-the-dirty-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

