﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-chlclan-随笔分类-Linux Programming Doc</title><link>http://www.cnitblog.com/chlclan/category/3029.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Sep 2011 02:34:48 GMT</lastBuildDate><pubDate>Wed, 28 Sep 2011 02:34:48 GMT</pubDate><ttl>60</ttl><item><title>本来还想用多线程来做的，后来发现有多进程更容易实现，所以就改成多进程了！</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/30/16150.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Wed, 30 Aug 2006 02:55:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/30/16150.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/16150.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/30/16150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/16150.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/16150.html</trackback:ping><description><![CDATA[
		<p>#include "local.h"<br />#include &lt;pthread.h&gt;<br />#include "util.h"<br />#include "debug.h"<br />#define BDBG dbg<br />/*<br />void *<br />func(void *arg){<br />        pid_t pid;<br /> pthread_t tid; <br /> pid = getpid();<br />        tid = pthread_self();<br />        printf("pid is %u\n",(unsigned int)pid);<br />        printf("thread id  is %u\n",(unsigned int)tid);<br /> struct mip6_args *rad_args;<br /> rad_args = (struct mip6_args *)arg;<br /> printf("----msg buff in args is %s\n", rad_args-&gt;buff);<br />        return((void *)0);<br />}<br />*/<br />main(void)<br />{<br /> //about new pthread<br />// pthread_t radius_thread;<br />// pthread_attr_t attrs;<br />// struct mip6_args rad_thread_args;<br />// int err;<br /> <br /> //rad_thread_args.argv[1]="Password = test";<br />// rad_thread_args.argv[0]="User-Name = test";</p>
		<p> <br /> int mid,n;<br /> key_t key;<br /> MESSAGE msg;</p>
		<p>
				<br /> //thread<br />// pthread_attr_init(&amp;attrs);<br /> //pthread_attr_setdetachstate(&amp;attrs, PTHREAD_CREATE_DETACHED);</p>
		<p> //Use the Same key with Client<br /> if((key  = ftok(".", SEED)) == -1){<br />  perror("Client : key generation");<br />  exit(1);<br /> }<br />// mid = msgget(key, IPC_CREAT | 0660);<br /> printf("server mid is %d\n", mid);<br /> while(1){<br />  if((n = msgrcv(65538, &amp;msg, sizeof(msg), SERVER,0)) == -1){<br />   perror("SERVER:msgrcv");<br />   exit(2);<br />  }<br />  else if (n==0)//client have finished<br />   break;<br />  else{<br />   printf("msg type is %d\n", msg.acct_msg.acct_type);<br />   BDBG("msg hoa is= %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&amp;msg.acct_msg.hoa));<br />   BDBG("msg coa is= %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&amp;msg.acct_msg.coa));<br />   //child process to communication to the radius server;<br />   if(fork() == 0){<br />    <br />    argv[1] = "-f";<br />    argv[2] = "/home/chl/radtest/test.conf";<br />    argv[3] = "[3ffe:3240:8007:602::1]:1813";<br />    argv[4] = "acct";<br />    argv[5] = "testing123";<br />    execlp("/home/radclient","radclient",argv[1],argv[2],argv[3],argv[4],argv[5]);<br />   }<br />   //parent process nothing to do <br />   else<br />    ;<br />   <br />//   rad_thread_args.buff = msg.buffer;<br />   //when recv msg from HA, should send acct to server<br />//         err = pthread_create(&amp;radius_thread, &amp;attrs, func,&amp;rad_thread_args);<br />//   if(err != 0){<br />//    perror("thread create:");<br />//    exit(6);<br />//   }<br />   /*<br />   printf("----about main is------\n");<br />   printf("main processid is %d\n",getpid());<br />   printf("main threadid is %d\n",pthread_self());<br />   */<br />  }<br /> }<br /> msgctl(mid, IPC_RMID, (struct msqid_ds *)0);<br /> exit(0);<br />}</p>
<img src ="http://www.cnitblog.com/chlclan/aggbug/16150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-30 10:55 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/30/16150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架设freeradius mysql 的radius服务器 作者：bell</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/28/16076.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Mon, 28 Aug 2006 09:05:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/28/16076.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/16076.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/28/16076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/16076.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/16076.html</trackback:ping><description><![CDATA[
		<table class="outer" cellspacing="1">
				<tbody>
						<tr>
								<td class="odd">
										<div class="comTitle">9. FreeRADIUS伺服器安裝</div>
										<div class="comText">
												<span style="FONT-SIZE: medium">
														<br />FreeRADIUS伺服器經過兩天的嘗試與摸索終於可以達成利用file與mysql做認證了，我主要是參考以下資料來建置完成FreeRADIUS伺服器：<br /><br /><a href="http://phorum.study-area.org//viewtopic.php?t=33002&amp;sid=405835706ac1b7ae0012e49490ed8a51" target="_blank"><font color="#804b30">http://phorum.study-area.org//viewtopic.php?t=33002&amp;sid=405835706ac1b7ae0012e49490ed8a51</font></a><br /><br />除了一些小地方需要修改之外，這篇文章的可靠度相當的高。<br /><br />為了預防文章以後淹沒在茫茫網海之中，我就將他轉錄到以下吧，順便將我所實驗的心得一併加入。<br />------------------------------------------------------------------------<br /><br />我是參考下列資料<br /><br />架設freeradius+mysql 的radius服務器<br /><a href="http://www.yesky.com/20030306/1655467.shtml" target="_blank"><font color="#804b30">http://www.yesky.com/20030306/1655467.shtml</font></a><br /><br />想玩無線網路認證值得先看的文件<br /><br /><a href="http://phorum.study-area.org/viewtopic.php?t=31918&amp;highlight=radius" target="_blank"><font color="#804b30">http://phorum.study-area.org/viewtopic.php?t=31918&amp;highlight=radius</font></a><br /><br />及其他網路上利用 google 查到的資料作的說明<br /><br />安裝 FreeRADIUS + Files + MySQL 認證<br /><br />1. 下載 FreeRADIUS<br />wget <a href="ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.4.tar.gz" target="_blank"><font color="#804b30">ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.4.tar.gz</font></a><br /><br />2. 解壓縮<br />tar zxvf freeradius-1.0.4.tar.gz<br /><br />3. 安裝 FreeRADIUS<br />cd freeradius-1.0.4<br />./configure --localstatedir=/var --sysconfdir=/etc<br />make<br />make install<br /><br />註: 有時候會報找不到文件rlm_sql_mysql這個時候只要把庫文件加入系統搜索的目錄裡<br /><br />　　比如：<br /><br />　　cp /usr/local/lib/* /usr/lib<br /><br /><br />4. 建立mysql的數據庫raius的表<br />MySQL root 登入<br />mysql -uroot -p密碼<br /><br />建立 radius 資料庫<br />create database radius;<br /><br />建立 radius 使用者<br /><br /><br /><br />匯入 radius 資料表<br />cd src/modules/rlm_sql/drivers/rlm_sql_mysql<br />mysql -uroot -p密碼 radius &lt; db_mysql.sql<br /><br />建立相關資料<br /><br />加入群組資料<br /><br />　　mysql -uroot -p密碼 radius<br />代碼:<br />insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');<br />insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');<br />insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Address',':=','255.255.255.254');<br />insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');<br /><br />加入測試賬號<br />　　<br />代碼:<br />insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test');<br /><br />測試賬號加入群組<br />　　<br />代碼:<br />insert into usergroup (username,groupname) values ('test','user');<br /><br />以後新增人員時只要使用下列命令<br />代碼:<br />insert into radcheck (username,attribute,op,value) values ('帳號','User-Password',':=','密碼');<br />insert into usergroup (username,groupname) values ('帳號','user');<br /><br /><br /><br />4. 設定 RADIUS<br />更改freeradius的設置<br />cd /etc/raddb<br />備份原始設定檔<br />代碼:<br />cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf-def<br />cp /etc/raddb/clients.conf /etc/raddb/clients.conf-def<br />cp /etc/raddb/sql.conf /etc/raddb/sql.conf-def<br />cp /etc/raddb/eap.conf /etc/raddb/eap.conf-def<br />cp /etc/raddb/users /etc/raddb/users-def<br /><br />更改 radiusd.conf 部份設定 如下列<br />代碼:<br />user = root<br />group = root<br />hostname_lookups = yes<br />allow_core_dumps = no<br />regular_expressions = yes<br />extended_expressions = yes<br />log_stripped_names = yes<br />log_auth = yes<br />log_auth_badpass = yes<br />log_auth_goodpass = yes<br />usercollide = no<br />lower_user = yes<br />lower_pass = no<br />nospace_user = no<br />nospace_pass = no<br /><br />files {<br />usersfile = ${confdir}/users<br />acctusersfile = ${confdir}/acct_users<br />preproxy_usersfile = ${confdir}/preproxy_users<br /><br />compat = no<br />}<br /><br />detail {<br />detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d<br /><br />detailperm = 0600<br />}<br /><br />detail auth_log {<br />detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d<br /><br />detailperm = 0600<br />}<br /><br />detail reply_log {<br />detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d<br /><br />detailperm = 0600<br />}<br /><br /><br /><br /><br /><br />acct_unique {<br />key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"<br />}<br /><br /><br /><br />attr_filter {<br />attrsfile = ${confdir}/attrs<br />}<br /><br />authorize {<br />preprocess<br /><br />auth_log<br /><br />attr_filter<br /><br />chap<br /><br />mschap<br /><br />suffix<br /><br />eap<br /><br />files<br /><br />sql<br /><br />}<br /><br /><br />authenticate {<br />Auth-Type PAP {<br />pap<br />}<br /><br />Auth-Type CHAP {<br />chap<br />}<br /><br />Auth-Type MS-CHAP {<br />mschap<br />}<br /><br />eap<br />}<br /><br /><br />preacct {<br />preprocess<br /><br />acct_unique<br /><br />suffix<br /><br />files<br />}<br /><br />accounting {<br />detail<br /><br />radutmp<br /><br />sql<br /><br />}<br /><br /><br />session {<br />radutmp<br /><br />sql<br />}<br /><br /><br />post-auth {<br /><br />reply_log<br /><br />sql<br /><br /><br />}<br /><br />在 clients.conf 增加下列設定<br />代碼:<br />client 192.168.1.1 {<br />secret = testing123<br />shortname = test<br />}<br /><br />更改 sql.conf 部份設定如下列<br />代碼:<br />sql {<br /><br />driver = "rlm_sql_mysql"<br /><br />server = "localhost" # MySQL 主機位置<br />login = "radius" # MySQL 帳號<br />password = "radius" # MySQL 密碼<br /><br />radius_db = "radius" # MySQL 資料庫名稱<br /><br />acct_table1 = "radacct"<br />acct_table2 = "radacct"<br /><br />postauth_table = "radpostauth"<br /><br />authcheck_table = "radcheck"<br />authreply_table = "radreply"<br /><br />groupcheck_table = "radgroupcheck"<br />groupreply_table = "radgroupreply"<br /><br />usergroup_table = "usergroup"<br /><br />deletestalesessions = yes<br /><br />sqltrace = yes<br />sqltracefile = ${logdir}/sqltrace.sql<br /><br />num_sql_socks = 5<br /><br />connect_failure_retry_delay = 60<br /><br /><br />sql_user_name = "%{User-Name}"<br />更改 eap.conf 部份設定如下列<br />代碼:<br />eap {<br />第 22 行 原 default_eap_type = md5<br />改為 default_eap_type = peap<br /><br />timer_expire = 60<br /><br />ignore_unknown_eap_types = no<br /><br />cisco_accounting_username_bug = no<br /><br /><br />md5 {<br />}<br /><br />leap {<br />}<br /><br />gtc {<br /><br />auth_type = PAP<br />}<br /><br /># 取消下列幾行的註解<br />tls {<br />private_key_password = whatever<br />private_key_file = ${raddbdir}/certs/cert-srv.pem<br /><br />certificate_file = ${raddbdir}/certs/cert-srv.pem<br /><br />CA_file = ${raddbdir}/certs/demoCA/cacert.pem<br /><br />dh_file = ${raddbdir}/certs/dh<br />random_file = ${raddbdir}/certs/random<br /><br />}<br />peap {<br />default_eap_type = mschapv2<br />}<br /><br />mschapv2 {<br />}<br />}<br /><br />更改 users 如下列<br />在第96行增加<br />代碼:<br />"testf" Auth-Type := Local, User-Password == "testf"<br />Reply-Message = "Hello, %u"<br /><br />註解 第 154 ,155 行<br />#DEFAULT Auth-Type = System<br /># Fall-Through = 1<br /><br />測試 flies 認證<br />radtest testf testf localhost 0 testing123<br /><br />測試 MySQL 認證<br />radtest test test localhost 0 testing123<br /><br />結果如下<br /><br />[<a href="mailto:root@UI-linux"><font color="#804b30">root@UI-linux</font></a> raddb]# radtest testf testf localhost 0 testing123<br />Sending Access-Request of id 188 to 127.0.0.1:1812<br />User-Name = "testf"<br />User-Password = "testf"<br />NAS-IP-Address = UI-linux<br />NAS-Port = 0<br />rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=188, length=34<br />Reply-Message = "Hello, testf"<br />[<a href="mailto:root@UI-linux"><font color="#804b30">root@UI-linux</font></a> raddb]# radtest test test localhost 0 testing123<br />Sending Access-Request of id 192 to 127.0.0.1:1812<br />User-Name = "test"<br />User-Password = "test"<br />NAS-IP-Address = UI-linux<br />NAS-Port = 0<br />rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=192, length=38<br />Service-Type = Framed-User<br />Framed-IP-Address = 255.255.255.254<br />Framed-IP-Netmask = 255.255.255.0<br />[<a href="mailto:root@UI-linux"><font color="#804b30">root@UI-linux</font></a> raddb]#<br /></span>
										</div>
								</td>
						</tr>
						<tr>
								<td class="even">
								</td>
								<td class="even" align="right">
										<a href="http://www.bell.idv.tw/modules/newbb/reply.php?forum=1&amp;post_id=564&amp;topic_id=527&amp;viewmode=flat&amp;order=">
												<img alt="回覆" src="http://www.bell.idv.tw/images/icons/reply.gif" />
										</a>
								</td>
						</tr>
						<!-- end comment post -->
						<!-- start comment post -->
						<tr>
								<td class="head">
										<a id="forumpost565">
										</a>
										<a href="http://www.bell.idv.tw/userinfo.php?uid=1">bell</a>
								</td>
								<td class="head">
										<div class="comDate">
												<span class="comDateCaption">
														<strong>張貼於: </strong>
												</span>2005/9/21 14:56</div>
								</td>
						</tr>
						<tr>
								<td class="odd">
										<div class="comUserRank">
												<div class="comUserRankText">管理員</div>
												<img alt="" src="http://www.bell.idv.tw/uploads/rank3dbf8ee8681cd.gif" />
										</div>
										<img class="comUserImg" alt="" src="http://www.bell.idv.tw/uploads/blank.gif" />
										<div class="comUserStat">
												<span class="comUserStatCaption">註冊日:</span> 2005/8/8</div>
										<div class="comUserStat">
												<span class="comUserStatCaption">來自:</span>
										</div>
										<div class="comUserStat">
												<span class="comUserStatCaption">張貼數:</span> 761</div>
										<div class="comUserStatus">
										</div>
								</td>
								<td class="odd">
										<div class="comTitle">我的心得</div>
										<div class="comText">
												<span style="FONT-SIZE: medium">
														<br />首先，現在最新版的freeradius版本已經進到1.0.5了，是在2005.09.09推出的。<br /><br />而我所使用的linux distro是CentOS 4.1完整安裝，裡面已經內含 freeradius 1.0.1，所以一開始的時候我是以內建的 1.0.1嘗試架設，但在以下這個步驟時卻一直出現錯誤訊息：<br /><br />mysql -uroot -p密碼 radius &lt; db_mysql.sql<br /><br />無法順利匯入到radius資料庫中。反覆查找資料之後發現，問題應該出在mysql版本上，1.0.1所附的 db_mysql.sql 應該是給 mysql 3.x版用的。<br /><br />在我下載了 1.0.4與 1.0.5 tar.gz版本的檔案來安裝時，這個步驟便可以順利的完成而沒有任何錯誤訊息。<br /></span>
										</div>
								</td>
						</tr>
						<tr>
								<td class="even">
								</td>
								<td class="even" align="right">
										<a href="http://www.bell.idv.tw/modules/newbb/reply.php?forum=1&amp;post_id=565&amp;topic_id=527&amp;viewmode=flat&amp;order=">
												<img alt="回覆" src="http://www.bell.idv.tw/images/icons/reply.gif" />
										</a>
								</td>
						</tr>
						<!-- end comment post -->
						<!-- start comment post -->
						<tr>
								<td class="head">
										<a id="forumpost731">
										</a>
										<a href="http://www.bell.idv.tw/userinfo.php?uid=1">bell</a>
								</td>
								<td class="head">
										<div class="comDate">
												<span class="comDateCaption">
														<strong>張貼於: </strong>
												</span>2006/3/14 11:25</div>
								</td>
						</tr>
						<tr>
								<td class="odd">
										<div class="comUserRank">
												<div class="comUserRankText">管理員</div>
												<img alt="" src="http://www.bell.idv.tw/uploads/rank3dbf8ee8681cd.gif" />
										</div>
										<img class="comUserImg" alt="" src="http://www.bell.idv.tw/uploads/blank.gif" />
										<div class="comUserStat">
												<span class="comUserStatCaption">註冊日:</span> 2005/8/8</div>
										<div class="comUserStat">
												<span class="comUserStatCaption">來自:</span>
										</div>
										<div class="comUserStat">
												<span class="comUserStatCaption">張貼數:</span> 761</div>
										<div class="comUserStatus">
										</div>
								</td>
								<td class="odd">
										<div class="comTitle">我的心得 (2006.03.29更新)</div>
										<div class="comText">在2006.03.13時我依照此份文件於CentOS 4.2的機器上重新安裝freeradius server，發現此文章有需要修改之處，所以重新更新此文章內容。<br /><br /><span style="FONT-SIZE: large"><b>一 前言</b></span><br /><br />RADIUS是 Remote Authentication Dial-In User Service 的縮寫，可以執行對用戶的驗證、授權和記費（AAA）。<br /><br />在Unix-Like的作業系統（如linux，bsd...）上最常被使用的radius伺服器軟體是freeradius，這是一套開源碼(open source code)且免費的軟體，所以本文重點就在於如何在linux上架設freeradius伺服器的過程，至於RADIUS本身的運作原理則不在本文討論範圍。<br /><br /><span style="FONT-SIZE: large"><b>二 安裝環境</b></span><br /><br />本文件依照以下環境安裝與執行並進行相關測試：<br /><br />OS : CentOS 4.2 i386(RedHat RHEL 4 clone version)<br />website : <a href="http://www.centos.org/" target="_blank"><font color="#804b30">http://www.centos.org</font></a><br /><br />freeradius : freeradius-1.1.1.tar.gz<br />website : <a href="http://www.freeradius.org/" target="_blank"><font color="#804b30">http://www.freeradius.org</font></a><br /><br />Mysql : mysql-4.1.12-3.RHEL4.1 (2006.03.20釋出)<br /><br />Compiler : GCC-3.4.4-2<br /><br /><span style="FONT-SIZE: large"><b>三 下載與解壓縮軟體</b></span><br /><br />下載freeradius軟體請至 <a href="http://www.freeradius.org/getting.html" target="_blank"><font color="#804b30">http://www.freeradius.org/getting.html</font></a> 載回最新版軟體。<br /><br />下載之軟體建議放至 /usr/local/src下進行編譯，以下的文章皆以 /usr/local/src目錄為安裝目錄。<br /><br />解壓縮軟體請執行<br /><br /><span style="COLOR: #0000ff">tar zxvf freeradius-1.1.1.tar.gz</span><br /><br />解壓縮完畢之後將會產生一個freeradius-1.1.1的目錄，所有解壓縮完的檔案都會放在這個目錄下。<br /><br /><span style="FONT-SIZE: large"><b>四 移除舊軟體</b></span><br /><br />如果你的OS是完整安裝的話，那在開始進行編譯與安裝之前，必須先將OS所附的舊版freeradius移除掉再進行後續的編譯與安裝。<br /><br />以root使用者權限執行以下指令：<br /><br /><span style="COLOR: #0000ff">rpm -e freeradius*</span><br /><br /><span style="FONT-SIZE: large"><b>五 編譯與安裝</b></span><br /><br />以root權限執行以下指令：<br /><br /><span style="COLOR: #0000ff">./configure<br />make<br />make install</span><br /><br />沒錯，這樣就完成了整個程式的編譯與安裝，夠簡單了吧？<br /><br />如果要指定安裝的目錄與設定檔的目錄的話，可以改成：<br /><br /><span style="COLOR: #0000ff">./configure --localstatedir=/var --sysconfdir=/etc <br />make<br />make install</span><br /><br /><span style="FONT-SIZE: large"><b>六 設定mysql資料庫</b></span><br /><br />在進行freeradius的設定與執行之前，我們先將mysql的資料庫與相關設定做好，在資料庫這方面我建議以phpmyadmin來進行相關工作會比較輕鬆。<br /><br />當然，如果你很熟mysql的指令操作的話也可以使用文字模式下的指令來進行。<br /><br />mysql資料庫的安裝可以參考本站這篇文章：<br /><a href="http://www.bell.idv.tw/modules/newbb/viewtopic.php?topic_id=4&amp;forum=1" target="_blank"><font color="#804b30">http://www.bell.idv.tw/modules/newbb/viewtopic.php?topic_id=4&amp;forum=1</font></a><br /><br />phpmyadmin的安裝可以參考本站這篇文章：<br /><a href="http://www.bell.idv.tw/modules/newbb/viewtopic.php?topic_id=53&amp;forum=3" target="_blank"><font color="#804b30">http://www.bell.idv.tw/modules/newbb/viewtopic.php?topic_id=53&amp;forum=3</font></a><br /><br />首先先建立一個新的資料庫，名稱為 radius。<br /><br />然後建立一個資料庫使用者，名稱為 radius，並賦予他使用資料庫radius的權力。<br /><br />匯入 radius 資料表<br /><span style="COLOR: #0000ff"><br />cd /usr/src/freeradius-1.1.1/src/modules/rlm_sql/drivers/rlm_sql_mysql<br />mysql -uroot -p密碼 radius &lt; db_mysql.sql </span><br /><br />完成之後便會在資料庫radius中建立相關資料。<br /><br />在radius資料庫中加入群組資料：<br /><br />先登入資料庫<span style="COLOR: #0000ff">　　mysql -uroot -p密碼 radius</span><br /><br />在mysql提示號之後輸入以下指令<br /><span style="COLOR: #006600"><br />insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');<br />insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');<br />insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Address',':=','255.255.255.254');<br />insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');<br /></span><br />加入測試帳號<br />指令<span style="COLOR: #006600"><br />insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test');</span><br /><br />群組中加入測試帳號<br />指令<span style="COLOR: #006600"><br />insert into usergroup (username,groupname) values ('test','user');</span><br /><br />以後新增人員時只要使用下列命令<br />指令<span style="COLOR: #006600"><br />insert into radcheck (username,attribute,op,value) values ('帳號','User-Password',':=','密碼');<br />insert into usergroup (username,groupname) values ('帳號','user');</span><br /><br />到此已經完成mysql的準備工作了。<br /><br /><span style="FONT-SIZE: large"><b>七 設定RADIUS</b></span><br /><br />freeradius的設定檔統一放在 /etc/raddb 目錄下，欲進行下列變更之前請先將原始設定檔備份。<br /><br />更改 radiusd.conf 部份設定<br /><br />原始設定：<br /><span style="COLOR: #999900"><br />#user = nobody<br />#group = nobody<br /><br />hostname_lookups = no<br />allow_core_dumps = no<br />regular_expressions = yes<br />extended_expressions = yes<br />log_stripped_names = no<br />log_auth = no<br />log_auth_badpass = yes<br />log_auth_goodpass = yes<br />usercollide = no<br />lower_user = no<br />lower_pass = no<br />nospace_user = no<br />nospace_pass = no </span><br /><br />改成如下：<br /><span style="COLOR: #999900"><br />user = </span><span style="COLOR: #ff0000"><b>root</b></span> 拿掉前面的#號<br /><span style="COLOR: #999900">group = </span><span style="COLOR: #ff0000"><b>root</b></span> 拿掉前面的#號<br /><span style="COLOR: #999900">hostname_lookups = </span><span style="COLOR: #ff0000"><b>yes</b></span><br /><span style="COLOR: #999900">allow_core_dumps = no<br />regular_expressions = yes<br />extended_expressions = yes<br />log_stripped_names = </span><span style="COLOR: #ff0000"><b>yes</b></span><br /><span style="COLOR: #999900">log_auth = </span><span style="COLOR: #ff0000"><b>yes</b></span><br /><span style="COLOR: #999900">log_auth_badpass = yes<br />log_auth_goodpass = yes<br />usercollide = no<br />lower_user = </span><span style="COLOR: #ff0000"><b>yes</b></span><br /><span style="COLOR: #999900">lower_pass = no<br />nospace_user = no<br />nospace_pass = no </span><br /><br />接下來修改以下部份，原始設定如下<br /><span style="COLOR: #999900"><br /># detail auth_log {<br /># detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d<br /><br /># detailperm = 0600<br />#}<br /><br /># detail reply_log {<br /># detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d<br /><br /># detailperm = 0600<br />#}<br /><br /><br />authorize {<br />preprocess<br /><br /># auth_log<br /><br /># attr_filter<br /><br />chap<br /><br />mschap<br /><br />suffix<br /><br />eap<br /><br />files<br /><br /># sql<br /><br />}<br /><br />accounting {<br />detail<br /><br />radutmp<br /><br /># sql<br /><br />}<br /><br /><br />session {<br />radutmp<br /><br /># sql<br />}<br /><br /><br />post-auth {<br /><br /># reply_log<br /><br /># sql</span><br /><br />改成如下<br /><span style="COLOR: #999900"><br />detail auth_log { </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br />detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br /><br />detailperm = 0600 </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br />} </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br /><br />detail reply_log { </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br />detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d<br /><br />detailperm = 0600 </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br />} </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br /><br /><br />authorize {<br />preprocess<br /><br />auth_log </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br /><br />attr_filter </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br /><br />chap<br /><br />mschap<br /><br />suffix<br /><br />eap<br /><br />files<br /><br />sql </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br /><br />}<br /><br />accounting {<br />detail<br /><br />radutmp<br /><br />sql </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br /><br />}<br /><br /><br />session {<br />radutmp<br /><br />sql </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br />}<br /><br /><br />post-auth {<br /><br />reply_log </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br /><br />sql </span><span style="COLOR: #ff0000">&lt;-拿掉前面的#號</span><span style="COLOR: #999900"><br />}</span><br /><br />到這邊就完成了radiusd.conf的設定，接下來要修改的是 clients.conf 檔。<br /><br />在檔案的最後面新增以下內容：<br /><span style="COLOR: #999900"><br />client 192.168.1.1 {<br />secret = testing123<br />shortname = test<br />}</span><br /><br /><span style="COLOR: #ff0000"><b>注意！此處的ip address請依照自己的區域網路內容設定，不可照抄，以我自己的設定來說，我就將client 192.168.1.1修改為 10.0.0.xx，因為我的區網使用的private ip segment就是10.0.0.0。</b></span><br /><br />再來修改 sql.conf 的內容<br /><span style="COLOR: #999900"><br />sql {<br /><br />driver = "rlm_sql_mysql"<br /><br />server = "localhost" </span>MySQL 主機位置<span style="COLOR: #999900"><br />login = "radius" </span>MySQL 帳號<span style="COLOR: #999900"><br />password = "radius" </span>MySQL 密碼<span style="COLOR: #999900"><br />radius_db = "radius" </span>MySQL 資料庫名稱<br /><br />還記得在第六項時所作的mysql資料庫相關設定嗎？這裡的設定必須與第六項中的設定一致才行，如果你並不是依照範例設定，那記得在這邊要將內容設成與你的資料庫及使用者名稱還有密碼相符。<br /><span style="COLOR: #999900"><br />sqltrace = no </span>&lt;-請改成<span style="COLOR: #ff0000"><b>yes</b></span><br /><br />以上便完成了 sql.conf 檔案的修改，接下來修改 eap.conf 檔案。<br /><span style="COLOR: #999900"><br />eap {<br />default_eap_type = md5</span><br />改為<br /><span style="COLOR: #999900">default_eap_type = </span><span style="COLOR: #ff0000"><b>peap</b></span><br /><br />拿掉下列幾行的註解符號 #<br /><span style="COLOR: #999900">tls {<br />private_key_password = whatever<br />private_key_file = ${raddbdir}/certs/cert-srv.pem<br /><br />certificate_file = ${raddbdir}/certs/cert-srv.pem<br /><br />CA_file = ${raddbdir}/certs/demoCA/cacert.pem<br /><br />dh_file = ${raddbdir}/certs/dh<br />random_file = ${raddbdir}/certs/random<br /><br />}<br /><br />peap {<br />default_eap_type = mschapv2<br />} <br /></span><br />以上便完成了 eap.conf 檔案的修改，接下來修改 users 這個檔案。<br /><br />找到這一段<br /><span style="COLOR: #999900">#"John Doe" Auth-Type := Local, User-Password == "hello"<br /># Reply-Message = "Hello, %u"</span><br /><br />在他的後面加入<br /><span style="COLOR: #999900">"testf" Auth-Type := Local, User-Password == "testf"<br />Reply-Message = "Hello, %u" </span><br /><br />目的在於新增一個名稱為testf密碼為testf的使用者。<br /><br />然後在以下兩行前面加入註解符號 #<br /><br /><span style="COLOR: #999900">DEFAULT Auth-Type = System<br />Fall-Through = 1</span><br /><br />變成如下這樣<br /><br /><span style="COLOR: #999900">#DEFAULT Auth-Type = System<br /># Fall-Through = 1</span><br /><br />進行到這裡，已經完成了所有相關設定檔案的修改。<br /><br /><span style="FONT-SIZE: large"><b>八 執行freeradius</b></span><br /><br />freeradius的主程式有兩種執行模式，一種是正常執行，只要以root權限輸入指令<br /><br /><span style="COLOR: #0000ff">radiusd</span><br /><br />便可以正常執行freeradius程式，執行畫面如下<br /><br />[<a href="mailto:root@bell"><font color="#804b30">root@bell</font></a> raddb]# radiusd<br />Tue Mar 14 15:53:41 2006 : Info: Starting - reading configuration files ...<br /><br />要知道是否有正常執行起來可以用以下指令查詢<br /><br /><span style="COLOR: #0000ff">ps -A | grep radiusd</span><br /><br />會看到類似以下的畫面就是成功了，表示程式已經常駐在記憶體中執行<br /><br />[<a href="mailto:root@bell"><font color="#804b30">root@bell</font></a> raddb]# ps -A | grep radiusd<br />18197 ? 00:00:00 radiusd<br /><br />前面的數字18197是PID(program ID)，每台機器得到的結果並不會一樣，請不必在意，重點在後面。<br /><br />另一種執行方式是除錯模式，請執行以下指令<br /><span style="COLOR: #999900"><br />[<a href="mailto:root@bell"><font color="#804b30">root@bell</font></a> raddb]# radiusd -x</span><br /><br />這時螢幕上會出現如下般的訊息畫面<br /><br />Starting - reading configuration files ...<br />Using deprecated naslist file. Support for this will go away soon.<br />Module: Loaded exec<br />rlm_exec: Wait=yes but no output defined. Did you mean output=none?<br />Module: Instantiated exec (exec)<br />Module: Loaded expr<br />Module: Instantiated expr (expr)<br />Module: Loaded PAP<br />Module: Instantiated pap (pap)<br />Module: Loaded CHAP<br />.<br />.<br />.<br />[中間多餘的訊息節略]<br />Ready to process requests.<br /><br />這表示radiusd進入除錯模式(debug mode)，client端的任何存取都會將相關訊息顯示在螢幕上，以方便管理者進行除錯。<br /><br />如果程式能正常執行，那就可以進行下一步了。<br /><br /><span style="FONT-SIZE: large"><b>九 測試</b></span><br /><br />首先先測試 flies 認證，請執行以下指令<span style="COLOR: #0000ff"><br /><br />radtest testf testf localhost 0 testing123</span><br /><br />如看到以下顯示就表示 files 認證正常<br /><br />Sending Access-Request of id 206 to 127.0.0.1 port 1812<br />User-Name = "testf"<br />User-Password = "testf"<br />NAS-IP-Address = 255.255.255.255<br />NAS-Port = 0<br />rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=206, length=34<br />Reply-Message = "Hello, testf"<br /><br />這裡看到的 Reply-Message 就是你設定在 users 設定檔裡的內容，如果你改變了相關內容這裡顯示的部份也會跟著改變。而 testf testf 就是你設定在 users 設定檔裡的帳號與密碼。<br /><br />不過要記得，每次變更完 users 檔案內容後，都必須重新開啟 radiusd 以使程式載入新的設定內容。<br /><br />再來測試 MySQL 認證，執行以下指令<span style="COLOR: #0000ff"><br /><br />radtest test test localhost 0 testing123</span><br /><br />如看到以下顯示就表示 mysql 認證正常<br /><br />[<a href="mailto:root@bell"><font color="#804b30">root@bell</font></a> raddb]# radtest test test localhost 0 testing123<br />Sending Access-Request of id 192 to 127.0.0.1 port 1812<br />User-Name = "test"<br />User-Password = "test"<br />NAS-IP-Address = 255.255.255.255<br />NAS-Port = 0<br />rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=192, length=38<br />Service-Type = Framed-User<br />Framed-IP-Address = 255.255.255.254<br />Framed-IP-Netmask = 255.255.255.0<br /><br />進行到這裡都能正常的話就表示你的 freeradius 伺服器已經可以利用 files 與 mysql 資料庫來進行認證了。<br /><br /><span style="COLOR: #ff0000"><b>注意！在測試完畢之後請記得將 users 檔案中與 mysql的radius資料庫中將測試帳號刪除掉，以免造成系統漏洞，使不懷好意的使用者得以鑽過認證對系統產生危害。</b></span><br /><br /><span style="FONT-SIZE: large"><b>十 結語</b></span><br /><br />freeradius伺服器能接受的認證方式很多，這裡僅舉了 files 與 mysql 的認證方式，至於其他如LDAP，PAM....等認證方式等以後有機會時再介紹。<br /><br /><span style="FONT-SIZE: large"><b>十一 附錄</b></span><br /><br />本文參考以下相關資料寫成<br />來自酷！學園討論區<br /><a href="http://phorum.study-area.org//viewtopic.php?t=33002&amp;sid=405835706ac1b7ae0012e49490ed8a51" target="_blank"><font color="#804b30">http://phorum.study-area.org//viewtopic.php?t=33002&amp;sid=405835706ac1b7ae0012e49490ed8a51</font></a><br />來自IBM網站<br /><a href="http://www-128.ibm.com/developerworks/tw/library/l-radius/" target="_blank"><font color="#804b30">http://www-128.ibm.com/developerworks/tw/library/l-radius/</font></a><br />來自中國天極網<br /><a href="http://www.yesky.com/20030306/1655467.shtml" target="_blank"><font color="#804b30">http://www.yesky.com/20030306/1655467.shtml</font></a><br /><br />本文中以<span style="COLOR: #0000ff">藍色字體</span>標示的部份表示是linux系統下藥執行的指令。<br />以<span style="COLOR: #006600">草綠色字體</span>標示的部份則是mysql 提示符號下執行的指令。<br />以<span style="COLOR: #999900">黃色字體</span>標示的部份則為設定檔中的內容。<br />以<span style="COLOR: #ff0000">紅色字體</span>標示的部份則是要修改的地方或是警語。<br /><br /><span style="FONT-SIZE: large"><b>十二 相關設定檔範例下載</b></span><br /><br />在這裡我將已經按照上述文章修改過的設定檔提供有需要的人下載，下載之後有兩個檔案需視環境稍做修改，一個是clients.conf，client ip請依照你的環境去設。另一個是sql.conf，其中關於資料庫帳密等地方需依照你的環境做修改。<br /><br />radiusd.conf範例下載：<br /><br /><a href="http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/radiusd.conf" target="_blank"><font color="#804b30">http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/radiusd.conf</font></a><br /><br />clients.conf範例下載：<br /><br /><a href="http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/clients.conf" target="_blank"><font color="#804b30">http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/clients.conf</font></a><br /><br />sql.conf範例下載：<br /><br /><a href="http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/sql.conf" target="_blank"><font color="#804b30">http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/sql.conf</font></a><br /><br />eap.conf範例下載：<br /><br /><a href="http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/eap.conf" target="_blank"><font color="#804b30">http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/eap.conf</font></a><br /><br />users範例下載：<br /><br /><a href="http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/users" target="_blank"><font color="#804b30">http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/users</font></a><br /><br /><br />文章日期：2006.03.14<br />文章作者：Bell</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/chlclan/aggbug/16076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-28 17:05 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/28/16076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>0825 代码修改记录</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/25/15922.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Fri, 25 Aug 2006 01:56:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/25/15922.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/15922.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/25/15922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/15922.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/15922.html</trackback:ping><description><![CDATA[
		<p>ha.c<br />在ha.c的顶部增加一个新的全局变量，用来放mssage id,可以被其他函数调用int msg_id;<br />int mip6_ha_main(void)函数内部加入：<br /><br /> /*CaoHongLiang for radiusclient communication,message queue*/<br /> ha_radclient_init(); //初始化一个新的消息队列，用来发送数据到radiusclient。<br /><br />具体实现，就是创建了一个新的消息队列，<br /><br />/*Added By CaoHongLiang*/<br />ha_radclient_init()<br />{<br /> key_t key;<br /> pid_t cli_pid;<br /> <br /> </p>
		<p> cli_pid = getpid();<br /> if((key = ftok(".", SEED)) == -1){<br />  perror("ha_radclient_init: key generation");<br />  exit(1);<br /> }</p>
		<p> /*Creat Message queue*/<br /> if((msg_id = msgget(key, 0)) == -1){<br />  msg_id = msgget(key, IPC_CREAT|0660);<br />  printf("we have a new message queue,it's msg mid is %d\n", mid);<br /> }<br />}<br /></p>
<img src ="http://www.cnitblog.com/chlclan/aggbug/15922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-25 09:56 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/25/15922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天的具体进展0824</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/24/15877.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Thu, 24 Aug 2006 07:02:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/24/15877.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/15877.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/24/15877.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/15877.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/15877.html</trackback:ping><description><![CDATA[
		<p>这两天一直有个问题困扰着，就是由radclient发送的认证和计费包之后，server端都由于段错误（rad_mangle函数）跳出来，后来发现由rad_authorize函数传入的参数到rad_mangle后，内存就跑飞了，后来再rad_mangle函数中加了一个中间指针，来并重新编译了下，发现认证能够正常执行，可是后来发现计费又没法正常，而且错误完全一样，由此发现这个问题的一部分解决并不是由于刚才代码的修改，后来回想发现自己在编译的时候，重新进入了modules/preprocess中去编译和install了，从而发现问题可能出在这，后来将由影响的几个模块都编译进去，但是最后又发现rlm_krb5，又出错，是代码本身的问题。之后将freeradius-1.1.1中的同一个目录中的modulescopy进来之后，就正常的运行了。从而顺利解决了困扰两天的问题，下一步的工作将是将前两天的做的进程间的通信test代码融入到ha中，从而让ha能够正常将一些信息传送到client中并进一步封装。<br /><br /><br />编译步骤：<br />cd freeradius-0.7.1/<br />./configure<br />make<br />make install<br /><br />然后进入<br />cd src/modules<br />每个模块都进行三步<br />./confiugre<br />make<br />make install<br /><br />cd src/main<br />./configure<br />make<br />make install<br /><br />最后到<br />cd freeradius-0.7.1<br />重新<br />make <br />make install<br />就好了！<br /><br />这样server端能够正常接收从ipv6客户端发来的认证、计费请求<br />并能够回复接收！<br /><br /></p>
<img src ="http://www.cnitblog.com/chlclan/aggbug/15877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-24 15:02 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/24/15877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天工作总结</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/22/15737.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Tue, 22 Aug 2006 09:46:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/22/15737.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/15737.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/22/15737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/15737.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/15737.html</trackback:ping><description><![CDATA[今天主要完成对进程间通信方式的选择和测试，以及对线程的测试：<br />       首先对比了几种进程间的通信方式以及HA与radiusclient间数据传送的实际考虑，同时也考虑了难易程度，最后决定选择消息队列，<br />   消息队列的实现比较简单，一般来说有个client和server，其中client是消息队列的产生者，实际中也就是移动IPv6中的HA，还有一个是接收该消息的sever，实际环境中应该是radiusclient<br /><br />首先:client创建一个新的消息队列，msgget(key_t key,int msgflag);<br />其中key由ftok产生，同时注意server端用的key应该与这个key一样，才能正常的打开client创建好的消息队列并接收消息。今天测试了下程序，能够正常接收client的消息，并在接收到消息之后，能够正常创建一个新的线程来处理这个消息。<br /><br /><br />对于实际情况，想法是这样的，<br />首先对HA扩展<br />当mn移动到一个外地网络时<br />应该发送一个消息到radiusclient去，同时clientserver发送计费信息包到server。。。。。<br /><img src ="http://www.cnitblog.com/chlclan/aggbug/15737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-22 17:46 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/22/15737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对消息队列的修改，加入线程的处理！</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/22/15735.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Tue, 22 Aug 2006 09:23:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/22/15735.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/15735.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/22/15735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/15735.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/15735.html</trackback:ping><description><![CDATA[
		<p>该client主要是通过消息队列发送消息到server端<br />而server端则监听client的消息队列发送来的消息<br />在每次收到一个新的消息，都创建一个新的线程<br />该线程将主要用于将来吧client发过来的ha的消息来组合形成<br />acct request的消息发送到server端去。<br /><br />client.c<br />同前面一篇blog中记载<br />server.c<br />#include "local.h"<br />#include &lt;pthread.h&gt;<br />void *<br />func(void *arg){<br />        pid_t pid;<br /> pthread_t tid; <br /> pid = getpid();<br />        tid = pthread_self();<br />        printf("pid is %u\n",(unsigned int)pid);<br />        printf("thread id  is %u\n",(unsigned int)tid);<br /> struct mip6_args *rad_args;<br /> rad_args = (struct mip6_args *)arg;<br /> printf("----msg buff in args is %s\n", rad_args-&gt;buff);<br />        return((void *)0);<br />}</p>
		<p>main(void)<br />{<br /> //about new pthread<br /> pthread_t radius_thread;<br /> pthread_attr_t attrs;<br /> struct mip6_args rad_thread_args;<br /> int err;<br /> <br /> //rad_thread_args.argv[1]="Password = test";<br />// rad_thread_args.argv[0]="User-Name = test";</p>
		<p> <br /> int mid,n;<br /> key_t key;<br /> MESSAGE msg;</p>
		<p>
				<br /> //thread<br /> pthread_attr_init(&amp;attrs);<br /> //pthread_attr_setdetachstate(&amp;attrs, PTHREAD_CREATE_DETACHED);</p>
		<p> //Use the Same key with Client<br /> if((key  = ftok(".", SEED)) == -1){<br />  perror("Client : key generation");<br />  exit(1);<br /> }<br /> mid = msgget(key, IPC_CREAT | 0660);<br /> while(1){<br />  if((n = msgrcv(mid, &amp;msg, sizeof(msg), SERVER,0)) == -1){<br />   perror("SERVER:msgrcv");<br />   exit(2);<br />  }<br />  else if (n==0)//client have finished<br />   break;<br />  else{<br />   write(fileno(stdout),msg.buffer, strlen(msg.buffer));<br />   rad_thread_args.buff = msg.buffer;<br />   //when recv msg from HA, should send acct to server<br />         err = pthread_create(&amp;radius_thread, &amp;attrs, func,&amp;rad_thread_args);<br />   if(err != 0){<br />    perror("thread create:");<br />    exit(6);<br />   }<br />   /*<br />   printf("----about main is------\n");<br />   printf("main processid is %d\n",getpid());<br />   printf("main threadid is %d\n",pthread_self());<br />   */<br />  }<br /> }<br /> msgctl(mid, IPC_RMID, (struct msqid_ds *)0);<br /> exit(0);<br />}</p>
		<p> </p>
<img src ="http://www.cnitblog.com/chlclan/aggbug/15735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-22 17:23 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/22/15735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己写的一个关于消息队列的例子</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/22/15689.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Tue, 22 Aug 2006 01:25:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/22/15689.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/15689.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/22/15689.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/15689.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/15689.html</trackback:ping><description><![CDATA[
		<p>该client和server能达到的基本功能是保证client发出的消息能够从server端接收并在屏幕上显示。要保证server能够接收client的消息，就必须保证server的生成的msg的不标识符是一样的，也就是两个用的key是必须一样的。 这对于我的移动IPv6中的消息传送已经足够了！：）<br /><br />local.h<br />#include &lt;stdio.h&gt;<br />#include &lt;sys/types.h&gt;<br />#include &lt;sys/ipc.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;ctype.h&gt;<br />#include &lt;unistd.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;errno.h&gt;</p>
		<p>#define SEED 'g'<br />#define SERVER 1L<br />#define BUFFERSIZE 1024</p>
		<p>typedef struct {<br /> long msg_to;<br /> long msg_fm;<br /> char buffer[BUFFERSIZE];<br />}MESSAGE;<br /><br /><br />client.c<br />#include "local.h"<br />main(void)<br />{<br /> key_t key;<br /> pid_t  cli_pid;<br /> int  mid, n;<br /> MESSAGE msg;<br /> static char m_key[10];<br /> cli_pid = getpid();</p>
		<p> if((key = ftok(".",SEED)) == -1){<br />  perror("Client:key generation");<br />  exit(1);<br /> }<br /> <br /> /*Create Messg queue*/<br /> if((mid = msgget(key, 0)) == -1){<br />  mid = msgget(key, IPC_CREAT| 0660);<br />  switch(fork()){<br />   case -1:<br />    perror("Client:fork");<br />    exit(3);<br />   case 0:  //child process Added program later<br />    ;<br />    break; <br />  }<br /> }<br /> //parent process <br /> while(1){<br />  msg.msg_to =SERVER;//long int ,value is 1<br />  msg.msg_fm = cli_pid;<br />  write(fileno(stdout), "cmd&gt;",4); <br />  memset(msg.buffer, 0x0, BUFFERSIZE);<br />  n = read(fileno(stdin), msg.buffer, BUFFERSIZE);<br />  if(n == 0)<br />   break;<br />  if(msgsnd(mid, &amp;msg, sizeof(msg), 0) == -1){<br />   perror("Client: msgsend");<br />   exit(5);<br />  }<br /> }<br /> <br /> //delete msg queue<br /> msgsnd(mid, &amp;msg, 0, 0);<br /> exit(0);<br /> <br />}<br /><br />server.c<br />#include "local.h"</p>
		<p>main(void)<br />{<br /> int mid,n;<br /> key_t key;<br /> MESSAGE msg;</p>
		<p> //Use the Same key with Client<br /> if((key  = ftok(".", SEED)) == -1){<br />  perror("Client : key generation");<br />  exit(1);<br /> }<br /> mid = msgget(key, IPC_CREAT | 0660);<br /> while(1){<br />  if((n = msgrcv(mid, &amp;msg, sizeof(msg), SERVER,0)) == -1){<br />   perror("SERVER:msgrcv");<br />   exit(2);<br />  }<br />  else if (n==0)//client have finished<br />   break;<br />  else{<br />   write(fileno(stdout),msg.buffer, strlen(msg.buffer));<br />  }<br /> }<br /> msgctl(mid, IPC_RMID, (struct msqid_ds *)0);<br /> exit(0);<br />}<br /></p>
<img src ="http://www.cnitblog.com/chlclan/aggbug/15689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-22 09:25 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/22/15689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>radiusclient-0.3.2 中radacct的用法</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/21/15657.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Mon, 21 Aug 2006 09:02:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/21/15657.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/15657.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/21/15657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/15657.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/15657.html</trackback:ping><description><![CDATA[经过两天的不断调试，终于利用radacct能够发送出正确的数据包了<br />真是晕啊，看来代码要是写的不够好的话，再出错时不给予足够的输出信息时<br />用起来简直是想自杀，不过唯一的收获是对radiusclient的发送包的流程有个较为明确的流程<br />估计下面对ipv6的扩展能够进展的快些<br /><br /><br />1.radacct<br /><br />首先应该编辑/usr/local/etc/radiusclient/下面的文件servers<br />加入一个新行<br />localhost                testing123<br />其中testing123是与服务器的配置nas密码一致的<br />而radiusclient.conf现在并不需要修改<br /><br /><br />radacct -f /usr/local/etc/radiusclient/radiusclient.conf  然后按enter键<br />User-Name=test<br />Password=test<br />Acct-Status-Type=7<br />Acct-Delay-Time=10 然后按Ctrl+D(即输入EOF)可以看到输出：<br />RADIUS accounting OK<br /><br /><br />在网上找到一个新的radiusclient的一个扩展叫<br />radiusclient-ng-0.5.2<br />里面有一个新的test包叫<br />cd /src/.libs/radiusclient<br />用法呵上面的有点相同<br />./radiusclient -f radiusclient.conf -a User-Name=test Acct-Status-Type = 7 Acct-Delay-Time -p 3434<br />其中-p指的是指定发送端的端口<br /><br /><br />还有一个问题就是一开始发现frearadius &amp; radiusclient中很多执行文件不可以调试，<br />后来才发现这些可执行文件都是shell脚本文件，然后跟踪Makefile文件发现这些shell脚本都是调用<br />freeradius/src/main/或者radiusclient/底下的隐藏文件.libs，这个隐藏文件夹放了所有可执行二进制文件。<br />从而可以调试<img src ="http://www.cnitblog.com/chlclan/aggbug/15657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-21 17:02 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/21/15657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下获取命令行参数——getopt</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/20/15621.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Sun, 20 Aug 2006 11:59:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/20/15621.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/15621.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/20/15621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/15621.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/15621.html</trackback:ping><description><![CDATA[getopt<span style="FONT-FAMILY: 宋体">在</span><span lang="EN-US"><font face="Times New Roman">UNIX</font></span><span style="FONT-FAMILY: 宋体">下的命令列程式特别好用，特别是在你有许多参数要加入时。一般来说，你可以透过「</span><span lang="EN-US"><font face="Times New Roman">man 3 getopt</font></span><span style="FONT-FAMILY: 宋体">」来获得其说明。这个函数很好用，也很简单，但网上关于这个函数的中文介绍实在是少之又少，这篇文章就简单讲述一下如何利用</span><span lang="EN-US"><font face="Times New Roman">getopt</font></span><span style="FONT-FAMILY: 宋体">函数来获取参数，希望能给那些被参数读取弄得有一点点烦躁的朋友有一点点帮助。</span><h2 style="TEXT-INDENT: -25.5pt; tab-stops: list 25.5pt"><font size="5"><font color="#000000"><span lang="EN-US"><span><font face="Arial">1、</font></span></span><span style="FONT-FAMILY: 黑体">函数说明</span></font></font></h2><p style="TEXT-INDENT: -21pt; tab-stops: list 42.0pt"><font color="#000000"><span lang="EN-US" style="FONT-FAMILY: Wingdings"><span><font face="Wingdings" size="3">n</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体"><font size="3">表头文件：</font></span><span lang="EN-US"><font face="Times New Roman" size="3">＃i nclude &lt;unistd.h&gt;</font></span></font></p><p style="TEXT-INDENT: -21pt; tab-stops: list 42.0pt"><font color="#000000"><span lang="EN-US" style="FONT-FAMILY: Wingdings"><span><font face="Wingdings" size="3">n</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体"><font size="3">函数声明：</font></span><span lang="EN-US"><font face="Times New Roman" size="3">int getopt(int argc, char * const argv[], const char *optstring);</font></span></font></p><p style="TEXT-INDENT: -21pt; tab-stops: list 42.0pt"><font color="#000000"><span lang="EN-US" style="FONT-FAMILY: Wingdings"><span><font face="Wingdings" size="3">n</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体"><font size="3">函数说明：</font></span><span lang="EN-US"><font face="Times New Roman" size="3">getopt()</font></span><span style="FONT-FAMILY: 宋体"><font size="3">用来分析命令行参数。参数</font></span><span lang="EN-US"><font face="Times New Roman" size="3">argc</font></span><span style="FONT-FAMILY: 宋体"><font size="3">和</font></span><span lang="EN-US"><font face="Times New Roman" size="3">argv</font></span><span style="FONT-FAMILY: 宋体"><font size="3">是由</font></span><span lang="EN-US"><font face="Times New Roman" size="3">main()</font></span><span style="FONT-FAMILY: 宋体"><font size="3">传递的参数个数和内容。参数</font></span><span lang="EN-US"><font face="Times New Roman" size="3">optstring </font></span><span style="FONT-FAMILY: 宋体"><font size="3">则代表欲处理的选项字符串。此函数会返回在</font></span><span lang="EN-US"><font face="Times New Roman" size="3">argv </font></span><span style="FONT-FAMILY: 宋体"><font size="3">中下一个的选项字母，此字母会对应参数</font></span><span lang="EN-US"><font face="Times New Roman" size="3">optstring </font></span><span style="FONT-FAMILY: 宋体"><font size="3">中的字母。如果选项字符串里的字母后接着冒号</font></span><span lang="EN-US"><font face="Times New Roman" size="3">“:”</font></span><span style="FONT-FAMILY: 宋体"><font size="3">，则表示还有相关的参数，全域变量</font></span><span lang="EN-US"><font face="Times New Roman" size="3">optarg </font></span><span style="FONT-FAMILY: 宋体"><font size="3">即会指向此额外参数。如果</font></span><span lang="EN-US"><font face="Times New Roman" size="3">getopt()</font></span><span style="FONT-FAMILY: 宋体"><font size="3">找不到符合的参数则会印出错信息，并将全域变量</font></span><span lang="EN-US"><font face="Times New Roman" size="3">optopt</font></span><span style="FONT-FAMILY: 宋体"><font size="3">设为</font></span><span lang="EN-US"><font face="Times New Roman" size="3">“?”</font></span><font size="3"><span style="FONT-FAMILY: 宋体">字符，如果不希望</span><span lang="EN-US"><font face="Times New Roman">getopt()</font></span></font><span style="FONT-FAMILY: 宋体"><font size="3">印出错信息，则只要将全域变量</font></span><span lang="EN-US"><font face="Times New Roman" size="3">opterr</font></span><span style="FONT-FAMILY: 宋体"><font size="3">设为</font></span><span lang="EN-US"><font face="Times New Roman" size="3">0</font></span><span style="FONT-FAMILY: 宋体"><font size="3">即可。</font></span></font></p><p style="TEXT-INDENT: -21pt; tab-stops: list 42.0pt"><font color="#000000"><span lang="EN-US" style="FONT-FAMILY: Wingdings"><span><font face="Wingdings" size="3">n</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体"><font size="3">返回值：如果找到符合的参数则返回此参数字母，如果参数不包含在参数</font></span><span lang="EN-US"><font face="Times New Roman" size="3">optstring </font></span><span style="FONT-FAMILY: 宋体"><font size="3">的选项字母则返回</font></span><span lang="EN-US"><font face="Times New Roman" size="3">“?”</font></span><span style="FONT-FAMILY: 宋体"><font size="3">字符，分析结束则返回</font></span><font size="3"><span lang="EN-US"><font face="Times New Roman">-1</font></span><span style="FONT-FAMILY: 宋体">。</span></font></font></p><h2 style="TEXT-INDENT: -25.5pt; tab-stops: list 25.5pt"><font size="5"><font color="#000000"><span lang="EN-US"><span><font face="Arial">2、</font></span></span><span style="FONT-FAMILY: 黑体">例子程序</span></font></font></h2><p><font size="3"><font color="#000000"><span lang="EN-US"><span><font face="Times New Roman">       </font></span></span><span style="FONT-FAMILY: 宋体">下面是一个使用</span><span lang="EN-US"><font face="Times New Roman">getopt</font></span><span style="FONT-FAMILY: 宋体">函数读取参数的例子程序，该程序支持</span><font face="Times New Roman"><span lang="EN-US">–p –s –b –c</span></font><span style="FONT-FAMILY: 宋体">的参数，并将这些参数值读取后进行打印。你可以根据需要将这些代码稍作修改用于自己的程序中。</span></font></font></p><p><span lang="EN-US"><font face="Times New Roman" color="#000000" size="3"></font></span></p><p><span lang="EN-US"><font face="Times New Roman" color="#000000" size="3"></font></span></p><table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #e0e0e0; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="100%" border="1"><tbody><tr><td style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="100%"><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000">/*</font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span> </span>*<span>  </span>getopt.c</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span> </span>*<span>  </span>Author: Coonxu</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span> </span>*<span>  </span>email:<span>  </span>coonxu@126.com</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span> </span>*</font><span><font color="#000000">  </font></span></font></span><font color="#000000"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">这是一个使用</span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">getopt</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">函数读取参数的例子程序，该程序支持</span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> -p -s -b -c</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的参数，</span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></span></font></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span> </span>* <span></span></font></font></span><font color="#000000"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">并将这些参数值读取后进行打印。你可以根据需要将这些代码稍作修改用于自己的程序中。</span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></span></font></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span> </span>*/</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000"></font></span> </p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000"></font></span> </p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000">＃i nclude &lt;unistd.h&gt;</font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000">＃i nclude &lt;stdio.h&gt;</font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000"></font></span> </p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000">int main(int argc, char **argv)</font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000">{</font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>    </span>int ch;</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>    </span>opterr = 0;</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>    </span>while( ( ch = getopt( argc, argv, "s:b:c:p:" ) ) != EOF )</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>    </span>{</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>        </span>switch(ch)</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>        </span>{</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>            </span>case 's':</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>printf("s opt: %s\n", optarg);</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>break;</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>            </span>case 'b':</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>printf("b opt: %s\n", optarg);</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>break;</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>            </span>case 'c':</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>printf("c opt: %s\n", optarg);</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>break;</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>            </span>case 'p':</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>printf("p opt: %s\n", optarg);</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>break;</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>            </span>case '?':</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>printf( "illegal option: %c\n", ch );</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>                </span>break;</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>        </span>}</font><font color="#000000"><span>       </span></font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>    </span>}</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000"><font face="Courier New"><span>    </span></font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font face="Courier New"><font color="#000000"><span>    </span>return 0;</font></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"><font color="#000000">}</font></span></p></td></tr></tbody></table><img src ="http://www.cnitblog.com/chlclan/aggbug/15621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-20 19:59 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/20/15621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>radacct usage</title><link>http://www.cnitblog.com/chlclan/archive/2006/06/21/12601.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Wed, 21 Jun 2006 02:12:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/06/21/12601.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/12601.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/06/21/12601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/12601.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/12601.html</trackback:ping><description><![CDATA[
		<h2>
				<font face="Courier New">
						<font size="-1">ZT:</font>
				</font>
		</h2>
		<h2>
				<font face="Courier New">
						<font size="-1">http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html</font>
				</font>
		</h2>
		<h2>
				<font face="Courier New" size="-1">
				</font> </h2>
		<h2>
				<font face="Courier New" size="-1">
				</font> </h2>
		<h2>
				<font face="Courier New">
						<font size="-1">com.theorem.radius3.examples.radauth</font>
						<br />Class radacct</font>
		</h2>
		<pre>Object
  <img alt="extended by" src="http://www.axlradius.com/clientdocs/docs/resources/inherit.gif" /><b>radacct</b></pre>
		<font face="Courier New">
				<hr />
		</font>
		<dl>
				<dt>
						<font face="Courier New">public class <b>radacct</b></font>
				</dt>
				<dt>
						<font face="Courier New">extends Object </font>
				</dt>
		</dl>
		<p>
				<font face="Courier New">Test accounting class for a radius server. </font>
		</p>
		<p>
				<font face="Courier New">Sends a pair of accounting requests to a RADIUS server using command line options. The first is a Start packet the second is a Stop packet. </font>
		</p>
		<pre> Usage: radacct User-Name  inputCount ouputCount sessionId server[:port default is 1813]  secret [nasname]
 </pre>
		<font face="Courier New">The arguments: </font>
		<ul>
				<li>
						<font face="Courier New">name - User-Name attribute value - may contain a realm of the form michael@theorem.com These names must be in upper case. </font>
				</li>
				<li>
						<font face="Courier New">inputOctets - Count of input bytes.. </font>
				</li>
				<li>
						<font face="Courier New">outputOctets - Count of output bytes.. </font>
				</li>
				<li>
						<font face="Courier New">SessionId - Accounting session Identifier. </font>
				</li>
				<li>
						<font face="Courier New">server - The RADIUS server name or address. Optionally the port number can be appended to the server name. The default port is the RFC standard 1813. Many servers use the non-standard 1646 port. </font>
				</li>
				<li>
						<font face="Courier New">secret - The Radius server shared secret. </font>
				</li>
				<li>
						<font face="Courier New">nasname - Optional name to use for the NAS-Identifier value. </font>
				</li>
		</ul>
		<font face="Courier New">Examples: </font>
		<pre> radacct michael 1000 2000 MICK1 127.0.0.1 seversecret
 radacct michael 10000 10200 Zither 192.168.1.1:1645 testtesttest
 radacct michael 0000 10200 Acct-Zither 192.168.1.1 seversecret NAS1
 </pre>
		<font face="Courier New">Be sure that the RADIUS server allows the workstation as a client and that the secret is the same for the client and server. </font>
		<p>
		</p>
		<p>
				<font face="Courier New">
				</font>
		</p>
		<font face="Courier New">
				<hr />
		</font>
		<p>
				<!-- ======== NESTED CLASS SUMMARY ======== -->
				<!-- =========== FIELD SUMMARY =========== -->
				<!-- ======== CONSTRUCTOR SUMMARY ======== -->
				<a name="constructor_summary">
						<!-- -->
				</a>
		</p>
		<table cellspacing="0" cellpadding="3" width="100%" summary="" border="1">
				<tbody>
						<tr class="TableHeadingColor" bgcolor="#ccccff">
								<td colspan="2">
										<font face="Courier New" size="+2">
												<b>Constructor Summary</b>
										</font>
								</td>
						</tr>
						<tr class="TableRowColor" bgcolor="white">
								<td>
										<code>
												<b>
														<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html#radacct()">radacct</a>
												</b>()</code>
										<br />
										<font face="Courier New">           </font>
								</td>
						</tr>
				</tbody>
		</table>
		<font face="Courier New">  <!-- ========== METHOD SUMMARY =========== --></font>
		<a name="method_summary">
				<!-- -->
		</a>
		<table cellspacing="0" cellpadding="3" width="100%" summary="" border="1">
				<tbody>
						<tr class="TableHeadingColor" bgcolor="#ccccff">
								<td colspan="2">
										<font face="Courier New" size="+2">
												<b>Method Summary</b>
										</font>
								</td>
						</tr>
						<tr class="TableRowColor" bgcolor="white">
								<td valign="top" align="right" width="1%">
										<font size="-1">
												<code>static void</code>
										</font>
								</td>
								<td>
										<code>
												<b>
														<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html#main(java.lang.String[])">main</a>
												</b>(String[] args)</code>
										<br />
										<font face="Courier New">          Main task. </font>
								</td>
						</tr>
				</tbody>
		</table>
		<font face="Courier New"> </font>
		<a name="methods_inherited_from_class_Object">
				<!-- -->
		</a>
		<table cellspacing="0" cellpadding="3" width="100%" summary="" border="1">
				<tbody>
						<tr class="TableSubHeadingColor" bgcolor="#eeeeff">
								<td>
										<b>
												<font face="Courier New">Methods inherited from class Object</font>
										</b>
								</td>
						</tr>
						<tr class="TableRowColor" bgcolor="white">
								<td>
										<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code>
								</td>
						</tr>
				</tbody>
		</table>
		<font face="Courier New">  </font>
		<p>
				<!-- ============ FIELD DETAIL =========== -->
				<!-- ========= CONSTRUCTOR DETAIL ======== -->
				<a name="constructor_detail">
						<!-- -->
				</a>
		</p>
		<table cellspacing="0" cellpadding="3" width="100%" summary="" border="1">
				<tbody>
						<tr class="TableHeadingColor" bgcolor="#ccccff">
								<td>
										<font face="Courier New" size="+2">
												<b>Constructor Detail</b>
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<a name="radacct()">
				<!-- -->
		</a>
		<h3>
				<font face="Courier New">radacct</font>
		</h3>
		<pre>public <b>radacct</b>()</pre>
		<dl>
				<font face="Courier New">
				</font>
		</dl>
		<!-- ============ METHOD DETAIL ========== -->
		<a name="method_detail">
				<!-- -->
		</a>
		<table cellspacing="0" cellpadding="3" width="100%" summary="" border="1">
				<tbody>
						<tr class="TableHeadingColor" bgcolor="#ccccff">
								<td>
										<font face="Courier New" size="+2">
												<b>Method Detail</b>
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<a name="main(java.lang.String[])">
				<!-- -->
		</a>
		<h3>
				<font face="Courier New">main</font>
		</h3>
		<pre>public static void <b>main</b>(String[] args)</pre>
		<dl>
				<dd>
						<font face="Courier New">Main task. This authenticates and accounts against a radius server defined the radtest.properties file. The Authentication loop uses the AttributeArray class to create attributes. The Accounting loop use the Radius object's methods to create attributes. </font>
						<p>
						</p>
				</dd>
				<dd>
						<dl>
								<dt>
										<b>
												<font face="Courier New">Parameters:</font>
										</b>
								</dt>
								<dd>
										<code>args</code>
										<font face="Courier New"> - Command line arguments. login, input count, output count, Session Id, server[:port default is 1812], secretkey [nasname]</font>
								</dd>
						</dl>
				</dd>
		</dl>
		<!-- ========= END OF CLASS DATA ========= -->
		<font face="Courier New">
				<hr />
				<!-- ======= START OF BOTTOM NAVBAR ====== -->
		</font>
		<a name="navbar_bottom">
				<!-- -->
		</a>
		<a title="Skip navigation links" href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html#skip-navbar_bottom">
		</a>
		<table cellspacing="0" cellpadding="1" width="100%" summary="" border="0">
				<tbody>
						<tr>
								<td class="NavBarCell1" bgcolor="#eeeeff" colspan="3">
										<a name="navbar_bottom_firstrow">
												<!-- -->
										</a>
										<table cellspacing="3" cellpadding="0" summary="" border="0">
												<tbody>
														<tr valign="top" align="middle">
																<td class="NavBarCell1" bgcolor="#eeeeff">
																		<a href="http://www.axlradius.com/clientdocs/docs/overview-summary.html">
																				<font class="NavBarFont1" face="Courier New">
																						<b>Overview</b>
																				</font>
																		</a>
																		<font face="Courier New"> </font>
																</td>
																<td class="NavBarCell1" bgcolor="#eeeeff">
																		<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/package-summary.html">
																				<font class="NavBarFont1" face="Courier New">
																						<b>Package</b>
																				</font>
																		</a>
																		<font face="Courier New"> </font>
																</td>
																<td class="NavBarCell1Rev" bgcolor="#ffffff">
																		<font face="Courier New"> <font class="NavBarFont1Rev"><b>Class</b></font> </font>
																</td>
																<td class="NavBarCell1" bgcolor="#eeeeff">
																		<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/class-use/radacct.html">
																				<font class="NavBarFont1" face="Courier New">
																						<b>Use</b>
																				</font>
																		</a>
																		<font face="Courier New"> </font>
																</td>
																<td class="NavBarCell1" bgcolor="#eeeeff">
																		<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/package-tree.html">
																				<font class="NavBarFont1" face="Courier New">
																						<b>Tree</b>
																				</font>
																		</a>
																		<font face="Courier New"> </font>
																</td>
																<td class="NavBarCell1" bgcolor="#eeeeff">
																		<a href="http://www.axlradius.com/clientdocs/docs/deprecated-list.html">
																				<font class="NavBarFont1" face="Courier New">
																						<b>Deprecated</b>
																				</font>
																		</a>
																		<font face="Courier New"> </font>
																</td>
																<td class="NavBarCell1" bgcolor="#eeeeff">
																		<a href="http://www.axlradius.com/clientdocs/docs/index-all.html">
																				<font class="NavBarFont1" face="Courier New">
																						<b>Index</b>
																				</font>
																		</a>
																		<font face="Courier New"> </font>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
								<td valign="top" align="right" rowspan="3">
										<em>
												<font face="Courier New">RADIUS Client API (V3)</font>
										</em>
								</td>
						</tr>
						<tr>
								<td class="NavBarCell2" bgcolor="white">
										<font size="-2">
												<font face="Courier New"> PREV CLASS   </font>
												<a title="class in com.theorem.radius3.examples.radauth" href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radauth.html">
														<b>
																<font face="Courier New">NEXT CLASS</font>
														</b>
												</a>
										</font>
								</td>
								<td class="NavBarCell2" bgcolor="white">
										<font size="-2">
												<a href="http://www.axlradius.com/clientdocs/docs/index.html" target="_top">
														<b>
																<font face="Courier New">FRAMES</font>
														</b>
												</a>
												<font face="Courier New">    </font>
												<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html" target="_top">
														<b>
																<font face="Courier New">NO FRAMES</font>
														</b>
												</a>
												<font face="Courier New">    
<script type="text/javascript"><!--
  if(window==top) {
    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //--></script></font>
												<a href="http://www.axlradius.com/clientdocs/docs/allclasses-noframe.html">
														<b>
																<font face="Courier New">All Classes</font>
														</b>
												</a>
												<noscript>
														<a href="../../../../../allclasses-noframe.html">
																<b>
																		<font face="Courier New">All Classes</font>
																</b>
														</a>
												</noscript>
										</font>
								</td>
						</tr>
						<tr>
								<td class="NavBarCell3" valign="top">
										<font size="-2">
												<font face="Courier New">SUMMARY: NESTED | FIELD | </font>
												<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html#constructor_summary">
														<font face="Courier New">CONSTR</font>
												</a>
												<font face="Courier New"> | </font>
												<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html#method_summary">
														<font face="Courier New">METHOD</font>
												</a>
										</font>
								</td>
								<td class="NavBarCell3" valign="top">
										<font size="-2">
												<font face="Courier New">DETAIL: FIELD | </font>
												<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html#constructor_detail">
														<font face="Courier New">CONSTR</font>
												</a>
												<font face="Courier New"> | </font>
												<a href="http://www.axlradius.com/clientdocs/docs/com/theorem/radius3/examples/radauth/radacct.html#method_detail">
														<font face="Courier New">METHOD</font>
												</a>
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<a name="skip-navbar_bottom">
		</a>
		<!-- ======== END OF BOTTOM NAVBAR ======= -->
		<font face="Courier New">
				<hr />
		</font>
		<font size="-1">
				<a href="http://www.axlradius.com/support.htm" target="_blank">
						<font face="Courier New">Submit a bug report or feature request</font>
				</a>
				<br />
				<br />
				<font face="Courier New">Copyright 1998-2002 AXL Software. PO Box 97, Viola, Delaware 19979, U.S.A. All Rights Reserved.</font>
		</font>
<img src ="http://www.cnitblog.com/chlclan/aggbug/12601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-06-21 10:12 <a href="http://www.cnitblog.com/chlclan/archive/2006/06/21/12601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在FC5(2.6.15)中编译linux-2.6.8.1内核出错解决方法</title><link>http://www.cnitblog.com/chlclan/archive/2006/06/20/12569.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Tue, 20 Jun 2006 08:54:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/06/20/12569.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/12569.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/06/20/12569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/12569.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/12569.html</trackback:ping><description><![CDATA[发现在FC5 (linux-2.6.15)中下载linux-2.6.8.1.tar.gz 解压后,使用make menuconfig老是出错,而直接编译linux-2.6.15不会出错,发现出错的文件是linux-2.6.8.1/scripts中的文件,所以我将linux-2.6.15/scripts文件覆盖了linux-2.6.8.1中的scripts文件,make menuconfig OK<img src ="http://www.cnitblog.com/chlclan/aggbug/12569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-06-20 16:54 <a href="http://www.cnitblog.com/chlclan/archive/2006/06/20/12569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>netlink 编程介绍(V0.2)  ZT</title><link>http://www.cnitblog.com/chlclan/archive/2006/06/20/12546.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Tue, 20 Jun 2006 03:39:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/06/20/12546.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/12546.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/06/20/12546.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/12546.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/12546.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: netlink 编程介绍(V0.2)														作者: Hoyt Luo &lt;hoytluo@21cn.com&gt;														Linux从2.2开始支持PF_NETLINK域的通讯方式，这个方式主要的用途是在Linux的内核空间和用户空间进行通讯。目前在网络上面关于netlink编程的中文资料很少，为了促进对netlink编程...&nbsp;&nbsp;<a href='http://www.cnitblog.com/chlclan/archive/2006/06/20/12546.html'>阅读全文</a><img src ="http://www.cnitblog.com/chlclan/aggbug/12546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-06-20 11:39 <a href="http://www.cnitblog.com/chlclan/archive/2006/06/20/12546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>netlink userspace code</title><link>http://www.cnitblog.com/chlclan/archive/2006/06/20/12545.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Tue, 20 Jun 2006 03:37:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/06/20/12545.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/12545.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/06/20/12545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/12545.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/12545.html</trackback:ping><description><![CDATA[#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;errno.h&gt;<br />#include &lt;sys/socket.h&gt;<br />#include &lt;sys/types.h&gt;<br />#include &lt;unistd.h&gt;<br />#include &lt;asm/types.h&gt;<br />#include &lt;linux/netlink.h&gt;<br />/*<br />#include &lt;linux/rtnetlink.h&gt;<br />#include &lt;linux/netdevice.h&gt;<br />#include &lt;net/if_arp.h&gt;<br />#include &lt;netinet/if_ether.h&gt;<br />#include &lt;netinet/ether.h&gt;<br />*/<br /><br /><br /><br />#define MAX_PAYLOAD 1024  /* maximum payload size*/<br /><br />struct sockaddr_nl src_addr, dest_addr;<br /><br />struct nlmsghdr *nlh = NULL;<br />struct msghdr msg;<br /><br />struct iovec iov;<br /><br />int sock_fd;<br /><br />void main() {<br /><br /> sock_fd = socket(PF_NETLINK, SOCK_RAW,16);<br /><br /> memset(&amp;src_addr, 0, sizeof(src_addr));<br /><br /> src_addr.nl_family = AF_NETLINK;     <br /><br /> src_addr.nl_pid = getpid();  /* self pid */<br /><br /> src_addr.nl_groups = 0;  /* not in mcast groups */<br /><br /> bind(sock_fd, (struct sockaddr*)&amp;src_addr,sizeof(src_addr));<br /><br /> memset(&amp;dest_addr, 0, sizeof(dest_addr));<br /><br /> dest_addr.nl_family = AF_NETLINK;<br /><br /> dest_addr.nl_pid = 0;   /* For Linux Kernel */<br /><br /> dest_addr.nl_groups = 0; /* unicast */<br /><br /> nlh=(struct nlmsghdr *)malloc(NLMSG_SPACE(MAX_PAYLOAD));<br /><br /> /* Fill the netlink message header */<br /><br /> nlh-&gt;nlmsg_len = NLMSG_SPACE(MAX_PAYLOAD);<br /><br /> nlh-&gt;nlmsg_pid = getpid();  /* self pid */<br /><br /> nlh-&gt;nlmsg_flags = 0;<br /><br /> /* Fill in the netlink message payload */<br /><br /> strcpy(NLMSG_DATA(nlh), "Hello you!");<br /><br /> iov.iov_base = (void *)nlh;<br /><br /> iov.iov_len = nlh-&gt;nlmsg_len;<br /><br /> msg.msg_name = (void *)&amp;dest_addr;<br /><br /> msg.msg_namelen = sizeof(dest_addr);<br /><br /> msg.msg_iov = &amp;iov;<br /><br /> msg.msg_iovlen = 1;<br /><br /> sendmsg(sock_fd, &amp;msg, 0);<br /><br /> /* Read message from kernel */<br /><br /> memset(nlh, 0, NLMSG_SPACE(MAX_PAYLOAD));<br /><br /> recvmsg(sock_fd, &amp;msg, 0);<br /><br /> printf(" Received message payload: %s\n",<br /><br />        NLMSG_DATA(nlh));<br /><br />   <br /><br /> /* Close Netlink Socket */<br /><br /> close(sock_fd);<br /><br />} <br /><img src ="http://www.cnitblog.com/chlclan/aggbug/12545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-06-20 11:37 <a href="http://www.cnitblog.com/chlclan/archive/2006/06/20/12545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>路由选择技术</title><link>http://www.cnitblog.com/chlclan/archive/2006/06/16/12336.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Fri, 16 Jun 2006 02:29:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/06/16/12336.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/12336.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/06/16/12336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/12336.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/12336.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 目										   								录																																																										因特网的路由选择技术																																						. 																								2								...&nbsp;&nbsp;<a href='http://www.cnitblog.com/chlclan/archive/2006/06/16/12336.html'>阅读全文</a><img src ="http://www.cnitblog.com/chlclan/aggbug/12336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-06-16 10:29 <a href="http://www.cnitblog.com/chlclan/archive/2006/06/16/12336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为了使得程序可以在gdb中调试,应该在编译的时候加上-g选项(含有多个文件的编译方法)</title><link>http://www.cnitblog.com/chlclan/archive/2006/06/15/12305.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Thu, 15 Jun 2006 07:46:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/06/15/12305.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/12305.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/06/15/12305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/12305.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/12305.html</trackback:ping><description><![CDATA[
		<p style="LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 仿宋_GB2312; mso-fareast-font-family: 仿宋_GB2312">   </span>
				<font face="Courier New">
				</font>
				<font face="Courier New">
						<span lang="EN-US" style="FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">&gt; cc -g hello.c -o hello<br /></span>
						<span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 仿宋_GB2312; mso-fareast-font-family: 仿宋_GB2312">   </span>
						<span lang="EN-US" style="FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">&gt; g++ -g hello.cpp -o hello</span>
						<br />
				</font>
				<span lang="EN-US" style="FONT-FAMILY: 仿宋_GB2312; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
								<br />
								<br />
								<br />
								<font face="Courier New">1.现在有三个文件:main.c radiusclient.c radius.h<br />方法一:gcc -g main.c radiusclient.c -o main<br /><br /><br />方法二:写Makefile如下:<br /><br />main:main.o radiusclient.o<br />main.o:main.c<br />   gcc -g -c main.c<br />radiusclient.o:radiusclient.c<br />   gcc -g -c radiusclient.c<br />clean:<br />   rm *.o main</font>
						</o:p>
				</span>
		</p>
<img src ="http://www.cnitblog.com/chlclan/aggbug/12305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-06-15 15:46 <a href="http://www.cnitblog.com/chlclan/archive/2006/06/15/12305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Comments abort the down doc</title><link>http://www.cnitblog.com/chlclan/archive/2006/06/08/11840.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Thu, 08 Jun 2006 08:56:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/06/08/11840.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/11840.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/06/08/11840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/11840.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/11840.html</trackback:ping><description><![CDATA[
		<div class="comment">
				<h3 class="title">
						<a class="active" href="http://www.linuxjournal.com/article/7356#comment-124611">need for compiled example</a>
				</h3>
				<div class="submitted">Submitted by majid taghiloo (not verified) on Sat, 2005-08-27 09:24. </div>
				<div class="content">
						<p>thanks for your article it is very useful . i try to create communication socket beetwin Kernel module and user land program . i used you proposed code . but it is not worked correctly . i compile my module and userland code correctly but there is no communication between them .<br />please , It would be nice if you could add working or at least compilable examples. </p>
						<p>best regard's<br />M.taghiloo</p>
				</div>
				<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/124611"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
		</div>
		<a id="comment-124610">
		</a>
		<div class="comment">
				<h3 class="title">
						<a class="active" href="http://www.linuxjournal.com/article/7356#comment-124610">need for compiled example</a>
				</h3>
				<div class="submitted">Submitted by majid taghiloo (not verified) on Sat, 2005-08-27 09:24. </div>
				<div class="content">
						<p>thanks for your article it is very useful . i try to create communication socket beetwin Kernel module and user land program . i used you proposed code . but it is not worked correctly . i compile my module and userland code correctly but there is no communication between them .<br />please , It would be nice if you could add working or at least compilable examples. </p>
						<p>best regard's<br />M.taghiloo</p>
				</div>
				<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/124610"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
		</div>
		<a id="comment-124609">
		</a>
		<div class="comment">
				<h3 class="title">
						<a class="active" href="http://www.linuxjournal.com/article/7356#comment-124609">need for compiled example</a>
				</h3>
				<div class="submitted">Submitted by majid taghiloo (not verified) on Sat, 2005-08-27 09:20. </div>
				<div class="content">
						<p>thanks for your article it is very useful . i try to create communication socket beetwin Kernel module and user land program . i used you proposed code . but it is not worked correctly . i compile my module and userland code correctly but there is no communication between them .<br />please , It would be nice if you could add working or at least compilable examples. </p>
						<p>best regard's<br />M.taghiloo</p>
				</div>
				<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/124609"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
		</div>
		<a id="comment-101287">
		</a>
		<div class="comment">
				<h3 class="title">
						<a class="active" href="http://www.linuxjournal.com/article/7356#comment-101287">Working userspace prog (below was kernel module, not userspace)</a>
				</h3>
				<div class="submitted">Submitted by Anonymous (not verified) on Thu, 2005-07-07 15:20. </div>
				<div class="content">
						<p>/* Working version of the Netlink Socket code from Linux Journal's Kernel Korner */<br />#include<br />#include<br />#include<br />#include<br />#include<br />#include </p>
						<p>#define MAX_PAYLOAD 1024<br />struct sockaddr_nl src_addr, dst_addr;<br />struct nlmsghdr *nlh = NULL;<br />struct msghdr msg;<br />struct iovec iov;<br />int sock_fd;</p>
						<p>int main()<br />{<br />sock_fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_NITRO);</p>
						<p>memset(&amp;src_addr, 0, sizeof(src_addr));<br />src_addr.nl_family = AF_NETLINK;<br />src_addr.nl_pid = getpid();<br />src_addr.nl_groups = 0; // no multicast<br />bind(sock_fd, (struct sockaddr*)&amp;src_addr, sizeof(src_addr));</p>
						<p>memset(&amp;dst_addr, 0, sizeof(dst_addr));<br />dst_addr.nl_family = AF_NETLINK;<br />dst_addr.nl_pid = 0; // 0 means kernel<br />dst_addr.nl_groups = 0; // no multicast</p>
						<p>nlh = (struct nlhmsghdr *)malloc(NLMSG_SPACE(MAX_PAYLOAD));</p>
						<p>/* Fill the netlink message header */<br />nlh-&gt;nlmsg_len = NLMSG_SPACE(MAX_PAYLOAD);<br />nlh-&gt;nlmsg_pid = getpid();<br />nlh-&gt;nlmsg_flags = 0;</p>
						<p>strcpy(NLMSG_DATA(nlh), "Yoo-hoo, Mr. Kernel!");</p>
						<p>iov.iov_base = (void *)nlh;<br />iov.iov_len = nlh-&gt;nlmsg_len;</p>
						<p>msg.msg_name = (void *)&amp;dst_addr;<br />msg.msg_namelen = sizeof(dst_addr);<br />msg.msg_iov = &amp;iov;<br />msg.msg_iovlen = 1;</p>
						<p>sendmsg(sock_fd, &amp;msg, 0);</p>
						<p>/* Read message from kernel */<br />memset(nlh, 0, NLMSG_SPACE(MAX_PAYLOAD));<br />recvmsg(sock_fd, &amp;msg, 0);<br />printf("Received message payload: %s\n", NLMSG_DATA(nlh));</p>
						<p>close(sock_fd);</p>
						<p>return (EXIT_SUCCESS);</p>
						<p>}</p>
				</div>
				<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/101287"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
		</div>
		<a id="comment-101286">
		</a>
		<div class="comment">
				<h3 class="title">
						<a class="active" href="http://www.linuxjournal.com/article/7356#comment-101286">The userspace program that compiles</a>
				</h3>
				<div class="submitted">Submitted by Daniel Purcell (not verified) on Thu, 2005-07-07 15:18. </div>
				<div class="content">
						<p>/* The Linux Journal Kernel Korner -- Working, compiling version of the kernel code */<br />#include<br />#include<br />#include<br />#include<br />#include<br />#include<br />#include </p>
						<p>MODULE_LICENSE("GPL");<br />MODULE_AUTHOR("Daniel Purcell");<br />MODULE_DESCRIPTION("Kernel Korner's working versinon of netlink sockets");</p>
						<p>// Note: Debug is not implemented<br />static int debug = 0;</p>
						<p>module_param(debug, int, 0);<br />MODULE_PARM_DESC(debug, "Debug information (default 0)");</p>
						<p>static struct sock *nl_sk = NULL;</p>
						<p>static void nl_data_ready (struct sock *sk, int len)<br />{<br />wake_up_interruptible(sk-&gt;sk_sleep);<br />}</p>
						<p>static void netlink_test()<br />{<br />struct sk_buff *skb = NULL;<br />struct nlmsghdr *nlh = NULL;<br />int err;<br />u32 pid;</p>
						<p>nl_sk = netlink_kernel_create(NETLINK_NITRO, nl_data_ready);<br />skb = skb_recv_datagram(nl_sk, 0, 0, &amp;err);</p>
						<p>nlh = (struct nlmsghdr *)skb-&gt;data;<br />printk(KERN_INFO "%s: received netlink message payload: %s\n", __FUNCTION__, NLMSG_DATA(nlh));</p>
						<p>pid = nlh-&gt;nlmsg_pid;<br />NETLINK_CB(skb).groups = 0;<br />NETLINK_CB(skb).pid = 0;<br />NETLINK_CB(skb).dst_pid = pid;<br />NETLINK_CB(skb).dst_groups = 0;<br />netlink_unicast(nl_sk, skb, pid, MSG_DONTWAIT);<br />sock_release(nl_sk-&gt;sk_socket);<br />}</p>
						<p>static int __init my_module_init(void)<br />{<br />printk(KERN_INFO "Initializing Netlink Socket");<br />netlink_test();<br />return 0;<br />}</p>
						<p>static void __exit my_module_exit(void)<br />{<br />printk(KERN_INFO "Goodbye");<br />}</p>
						<p>module_init(my_module_init);<br />module_exit(my_module_exit);</p>
				</div>
				<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/101286"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
		</div>
		<a id="comment-30232">
		</a>
		<div class="comment">
				<h3 class="title">
						<a class="active" href="http://www.linuxjournal.com/article/7356#comment-30232">netlink socket using</a>
				</h3>
				<div class="submitted">Submitted by Michael (not verified) on Tue, 2005-04-12 10:30. </div>
				<div class="content">
						<p>Hello,<br />The article is very clear and understood. It describes the advantages of using netlink sockets. I suppose it might be very useful in inter processes / threads communication in user-space application. But regarding the kernel space, there are disadvantages such as:<br />1. Kernel recompiling, because it requires netlink.h update.<br />2. Because it's running in the context of sendmsg prosses, the trivial ioctl is preferred just in the reason that it's not so sophisticated.<br />Any comments are very welcome,<br />Regards,<br />Michael</p>
				</div>
				<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/30232"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
		</div>
		<a id="comment-15457">
		</a>
		<div class="comment">
				<h3 class="title">
						<a class="active" href="http://www.linuxjournal.com/article/7356#comment-15457">kernel to kernel communication</a>
				</h3>
				<div class="submitted">Submitted by <a title="View user profile." href="http://www.linuxjournal.com/user/1867"><strong><font color="#000000">linuxram</font></strong></a> on Fri, 2005-02-25 18:23. </div>
				<div class="content">
						<p>I hear that netlink provides support for communication within two different subsystems of the kernel. Wish this article had covered that.</p>
						<p>RP</p>
				</div>
				<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/15457"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
		</div>
		<a id="comment-15022">
		</a>
		<div class="comment">
				<h3 class="title">
						<a class="active" href="http://www.linuxjournal.com/article/7356#comment-15022">examples</a>
				</h3>
				<div class="submitted">Submitted by <a title="View user profile." href="http://www.linuxjournal.com/user/2335"><strong><font color="#000000">mike_k</font></strong></a> on Mon, 2005-01-24 09:53. </div>
				<div class="content">
						<p>It would be nice if you could add working or at least compilable examples. </p>
						<p>thanks,<br />-M</p>
				</div>
				<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/15022"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
		</div>
		<div style="MARGIN-LEFT: 25px">
				<a id="comment-124667">
				</a>
				<div class="comment">
						<h3 class="title">
								<a class="active" href="http://www.linuxjournal.com/article/7356#comment-124667">Code sample in kernel itself</a>
						</h3>
						<div class="submitted">Submitted by Samiullah Mohammed (not verified) on Mon, 2005-08-29 19:01. </div>
						<div class="content">
								<p>netlink is implemented as a device like /dev/netlink on 2.4.20-8<br />open,read,write functions from userland to /dev/netlink actually map to socket calls.</p>
								<p>The kernel-sidecode for netlink is under /usr/src/linux-2.4/net/netlink/netlink_dev.c<br />If you wish to customize, you can change the NETLINK_MAJOR to a number you like (check major.h) and compile the module separrately with a makefile like</p>
								<p>export KERN_NAME = linux-2.4.20-8<br />CFLAGS = -I /usr/src/$(KERN_NAME)/include -D__KERNEL__</p>
								<p>netlink_dev1.o: netlink_dev1.c</p>
						</div>
						<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/124667"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
				</div>
		</div>
		<div style="MARGIN-LEFT: 50px">
				<a id="comment-125336">
				</a>
				<div class="comment">
						<h3 class="title">
								<a class="active" href="http://www.linuxjournal.com/article/7356#comment-125336">compile error</a>
						</h3>
						<div class="submitted">Submitted by liuhua (not verified) on Thu, 2005-09-29 03:08. </div>
						<div class="content">
								<p>I type all the source code as above article in FC4(2.6.11-1.1369_FC4-i686 kernel).</p>
								<p>kernel code error:<br />for "sk-&gt;sk_sleep" and "sock_release(nl_sk-&gt;sk_socket)":<br />dereferencing pointer to incomplete type</p>
								<p>user code error:<br />on line"nlh-&gt;nlmsg_len=NLMSG_SPACE(MAX_PAYLOAD)"<br />syntax error before '=' token </p>
								<p>what's the reason?? Help me please</p>
						</div>
						<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/125336"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
				</div>
		</div>
		<div style="MARGIN-LEFT: 75px">
				<a id="comment-140520">
				</a>
				<div class="comment">
						<h3 class="title">
								<a class="active" href="http://www.linuxjournal.com/article/7356#comment-140520">Re: compile error</a>
						</h3>
						<div class="submitted">Submitted by Chinmaya (not verified) on Thu, 2006-05-25 06:46. </div>
						<div class="content">
								<p>Inclued the following line at top of the program.</p>
								<p>#include </p>
								<p>Thanks<br />Chinmaya</p>
						</div>
						<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/140520"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><font color="#000000"><strong>email this page</strong></font></a></div>
				</div>
		</div>
		<div style="MARGIN-LEFT: 100px">
				<a id="comment-140521">
				</a>
				<div class="comment">
						<h3 class="title">
								<a class="active" href="http://www.linuxjournal.com/article/7356#comment-140521">Re: compile error</a>
						</h3>
						<div class="submitted">Submitted by Chinmaya (not verified) on Thu, 2006-05-25 06:48. </div>
						<div class="content">
								<p>Inclued the following line at top of the program. #include net/sock.h.</p>
								<p>Thanks<br />Chinmaya</p>
						</div>
						<div class="links">» <a href="http://www.linuxjournal.com/comment/reply/7356/140521"><strong><font color="#000000">reply</font></strong></a> | <a title="Email this page to a friend" href="http://www.linuxjournal.com/emailpage&amp;nid=7356"><strong><font color="#000000">email this page</font></strong></a></div>
				</div>
		</div>
<img src ="http://www.cnitblog.com/chlclan/aggbug/11840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-06-08 16:56 <a href="http://www.cnitblog.com/chlclan/archive/2006/06/08/11840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Why and How to Use Netlink Socket</title><link>http://www.cnitblog.com/chlclan/archive/2006/06/08/11834.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Thu, 08 Jun 2006 08:41:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/06/08/11834.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/11834.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/06/08/11834.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/11834.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/11834.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Home																																																		Kernel Korner - Why and How to Use Netlink Socket												By Kevin He on Wed, 2005-01-05 02:00.														...&nbsp;&nbsp;<a href='http://www.cnitblog.com/chlclan/archive/2006/06/08/11834.html'>阅读全文</a><img src ="http://www.cnitblog.com/chlclan/aggbug/11834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-06-08 16:41 <a href="http://www.cnitblog.com/chlclan/archive/2006/06/08/11834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>