單網卡編譯
① linux mint 銳捷linux客戶端怎麼安裝
1. 下載安裝文件
2. 解壓縮文件
3. 將lib文件夾中的將所需庫文件復制到/lib文件夾中(實際上只需兩個:libpcap.so.0.6.2,libstdc++.so.5)
4. 將bin文件夾中的xrgsu文件復制到/bin文件夾中
5. 設置靜態IP
1. 在windows下運行銳捷的認證客戶端,通過認證之後,用cmd運行ipconfig /all,查看你當前被分配到的IP地址信息,把IP Address,Subnet Mask,Default Gateway,DNS Servers這幾條信息記錄下來
2. 進入linux,在linux網路設置的地方,將網路配置成靜態IP的形式,IP信息要跟先前我們在windows下看到記下來的一致
6. 在命令行,運行 xrgsu,接著輸入你的用戶名,密碼,再輸入1和輸入0,就可以人在了。
7. 如果運行是會提示沒有許可權,則執行如下命令讓xrgsu有可執行的屬性
chmod +x /bin/xrgsu
8. 但是運行後會出現如下錯誤:
WARNING: IintNIC:NIC eth0 does not exist(3)
Get parameter error!
別急,最後一招:
[root@lxt ~]# ifconfig eth0 192.168.3.99
好了,大功告成:
[root@lxt ~]# xrgsu -d
XRGSupplicant 1.1.1
Ruijie Network CopyRight 2004-2005
Please input your user name:09SBY0715131
Please input your password:
Use default auth parameter,0-Use 1-UnUse(Default: 0):0
Searching server...
Connecting server...
Authenticating...
Authenticate SUCCESSFULLY!
dhclient: 沒有進程被殺死
eth0: 沒有進程被殺死
Searching server...
Connecting server...
Authenticating...
Authenticate SUCCESSFULLY!
Please input 'unauth' to LogOff:
IP Address is changed,Reauth Now!
Searching server...
Connecting server...
Authenticating...
Authenticate SUCCESSFULLY!
簡單吧?但可能還存在很多問題。下面一一說明。
錯誤問題處理
1. 多網卡或代理伺服器問題.
也許你會認證成功,但不久後,會出現如下錯誤,如何銳捷自動退出。
Detect Proxy Server!Err = 4 xrgsu exit!
這個錯誤是因為你誤安裝了xen虛擬機或xrgsu(銳捷)發現了lo網卡,造成了銳捷認證認為你具有多網卡,而銳捷認證是有單網卡要求的,所以起會認證後退出。在windows下安裝虛擬機後也會出現同樣情況,解決方法是不要使用銳捷公司提供的認證文件xrgsu,而改用bin文件夾下的 myxrgsu,此文件已經被網友重新編寫編譯過,起在認證後會省略檢測多網卡這一步。安裝myxrgsu的方法跟xrgsu一樣,只需要將其拷貝到 /bin目錄設置一下執行許可權即可。認證的時候就使用命令myxrgsu了。
2. 認證失敗
Authenticate Fail
這種情況多半是你的用戶名或者密碼錯誤,請重新檢查。另外一種就是前面安裝的時候IP信息填寫錯誤。
自動認證的方法
也許你會覺得每一次都得輸入命令,如何帳號密碼,這么很麻煩,這里告訴你一個簡單的方法。
1. 安裝expect下的3個rpm文件,安裝順序是:tcl-8.3.5-88.i386,expect-5.38.0-88.i386,expect-devel-5.38.0-88.i386.安裝命令為
rpm -i *.rpm 注釋:用*代替你需要安裝的文件名
在安裝tcl-8.3.5-88.i386.rpm的過程中,你可能會遇到如下類似的錯誤報告:
1. package ** conflict with package ** from tcl-8.3.5-88.i386.rpm
上面2個**是一個文件名,那麼說明你已經安裝了一個其他版本的tcllib,但原來的tcllib與現在的tcllib沖突,就必須先在軟體管理刪除原來已經安裝了的tcllib。
2. 拷貝netlogin到/bin目錄下
3. 拷貝autoconnect和autoconnectasroot到/usr/local/bin/目錄下,如何用用vi或gedit修改autoconnect和autoconnectasroot兩個文件,按說明填上您的帳號資料等.記住要保存哦!
說明:在非root用戶下我還沒有連接成功,好像說sudo不行,可以打開終端輸入"ru -"切換到root用戶在手動輸入試試看。
這樣就可以在命令提示行(普通用戶或root都行)中輸入netlogin就會自動連接上網了。
如果你還嫌麻煩,那就在桌面上做個快捷方式,對象命令為:netlogin,以後雙擊就可以上網了。
② Nginx基礎篇----虛擬主機、日誌、模塊、請求限制
在企業中,我們有很多的業務服務A,B,C等等,按照最最傳統的財大氣粗方式就是在一台機器上搭建一個Nginx,並且一個Nginx只為一個業務進行服務,如下圖所示,我們有3個業務服務,我們就在3個機器上搭建3個Nginx,這顯然是很浪費資源的一種不合理方式。
虛擬主機的方式是指,我們在同一個Nginx上運行多套單獨服務,而且這些服務是獨立的,如下圖所示:
基於主機多IP的方式有兩種:
第一步 :在單網卡上添加多個IP--ip a add ip地址 設備名
第二步 :我們找到nginx.conf中的http中的include的配置,找到其include的文件路徑
第三步 :找到默認配置文件,進行復制,將server中的listen進行改動,改為ip:port,在這里如果我們要為3個業務服務的話,我們就設置三個.conf的配置文件,每個配置文件中的ip不同即可。
第四步 :nginx -s stop -c /etc/nginx/nginx.conf
nginx -s表示給nginx的主進程發送信號,停止應用。-c表示啟動的時候使用哪個配置文件。
第一步 :我們找到nginx.conf中的http中的include的配置,找到其include的文件路徑
第二步 :找到默認配置文件,進行復制,將server中的listen 埠進行改動即可,每個配置文件中的埠不同即可。
第三步 :nginx -tc /etc/nginx/nginx.conf 對剛才修改的配置文件進行語法檢查
第四步 :nginx -c /etc/nginx/nginx.conf 啟動nginx
更改server_name :
Nginx的日誌類型有error.log和access_log兩類。error.log用於記錄錯誤類型的日誌,access_log記錄的是請求訪問的相關的日誌。Nginx使用了log_format把各種類型的變數進行組織,然後記錄到access_log當中去。
log_format只能配置到http模塊下,所以我們看到nginx.conf中,會看到log_format的使用方式如下圖所示:
Nginx的模塊分為官方的模塊和第三方的模塊,我們可以通過命令行nginx -V看到很多的--with-XXXX,這些就是Nginx中的模塊。
編譯選項--with-http_stub_status_mole,用於展示Nginx當前處理連接的狀態。這個模塊默認是沒有打開的,它必須要用戶顯示的server和location模塊中進行配置。
我們在nginx.conf中配置好後,通過IP:PORT/mystatus進行訪問,會看到以下結果:
該模塊使用的比較少,它表示是從目錄中隨機選取一個主頁。語法規則 random_index on | off,默認情況下是random_index off;只能放在location的上下文中。
這個模塊也用的不多,它主要用於對http的響應內容作替換。包含了很多用法:
sub_filter string replacement 默認是不開啟的,可以用在http,server,location中,作用是替換html中的字元。
sub_filter_last_modified on | off,默認是off,可以用在http,server,location中,作用是否阻止response header中寫入Last-Modified,防止緩存,默認是off,即防止緩存。
sub_filter_once on | off,默認是on,可以用在http,server,location中,作用sub_filter指令是執行一次,還是重復執行,默認是只執行一次。
Nginx中可以對連接頻率和請求頻率做限制。其中連接頻率限制的模塊是limit_conn_mole,請求頻率限制的模塊是limit_req_mole。
請求和連接到底有什麼區別呢?我們知道HTTP協議是建立在TCP協議之上的,客戶端在向服務端發起請求的時候,必須先建立三次握手連接,建立完連接之後才開始發送請求,為了保持這個連接我們使用FIN和ACK,這樣就可以在一個連接中多次發起請求,因此我們可以說HTTP請求建立在一次TCP連接基礎上,一次TCP請求至少產生一次HTTP請求。
連接限制的語法:
定義空間:
limit_conn_zone key zone=name:size 默認是沒有的,只能在http中配置,如果說我們想對用戶的IP地址做限制,那麼這里的key我們可以配置成$remote_addr,這里的name可以隨便命名,size設置大小
limit_conn zone number;這里的zone必須和上面的limit_conn_zone中的name對應,number表示的是連接數,默認是沒有的,可以在http,server,location中配置。
請求限制的語法:
定義空間:
limit_req_zone key zone=name:size rate=rate默認是沒有的,只能在http中配置
limit_req zone name [burst=number] [nodelay];這里的zone必須和上面的limit_req_zone中的name對應,number表示的是連接數,默認是沒有的,可以在http,server,location中配置;burst爆發的意思,這個配置的意思是設置一個大小為N的緩沖區,當有大量請求(爆發)過來時,超過了訪問頻次限制的請求可以先放到這個緩沖區內;nodelay,如果設置,超過訪問頻次而且緩沖區也滿了的時候就會直接返回503,如果沒有設置,則所有請求會等待排隊.
$binary_remote_addr是限制同一客戶端ip地址,binary_remote_addr和remote_addr其實是一樣的,但是binary_remote_addr要更節省空間。1m 可以儲存 32000 個並發會話。zone=req_zone:1m表示生成一個大小為1M,名字為req_one的內存區域,用來存儲訪問的頻次信息;rate=1r/s表示允許相同標識的客戶端的訪問頻次,這里限制的是每秒1次,還可以有比如30r/m的。這里我使用abtest來演示一下各種情況:
配置每秒鍾最多一次請求:
使用abtest發起請求,設置並發數20,發起20次請求。測試結果,成功1次,失敗19次,符合預期:
查看nginx錯誤日誌,圖中剛好有19個error記錄,而且是被限制了,符合預期:
設置一個大小為3的緩沖區,超過訪問頻次限制的請求將會放入到緩沖區中:
使用abtest發起請求,設置並發數20,發起20次請求。測試結果,成功4次,失敗16次,符合預期,因為第一次成功後,超過了請求限制,放了3個請求到緩沖區中,所以總共成功4個:
查看nginx錯誤日誌,圖中剛好有16個error記錄,而且是被限制了,符合預期:
設置最大連接數為1:
使用abtest發起請求,設置並發數20,發起20次請求。測試結果,成功20次,失敗0次,符合預期:
查看nginx錯誤日誌,無任何錯誤日誌,符合預期。
nginx的http_access_mole模塊實現的,相關語法如下圖所示:
~表示模式匹配,這里我們表示凡是訪問admin.html的請求,阻止180.158.232.219的訪問,同時允許所有的IP訪問。結果如下圖所示:
請求成功:
是nginx的http_auth_basic_mole模塊實現的,使用方式可以具體參考 http://nginx.org/en/docs/http/ngx_http_auth_basic_mole.html 這里不再贅述
Nginx的基礎篇就講到這里,歡迎大家指正,下一篇文章我將介紹如何使用Nginx作為靜態資源Web服務。
③ centos 7單網卡雙ip
先說明一下,CentOS實際上是RedHat系統的再編譯版本,所以對應的文檔可以參考一下RedHat對應版本的相關配置文檔。
接下來,由於RH7和RH6在網路這一塊的變動非常大,感覺相關內容已經處於重做的程度,所以推薦你還是看一下官方是如何定義附加IP的。附件是我找到的相關的文檔,你可以參考一下。
就我個人而言,在現在這種大家都比較生疏的情況下,為了避免碰到一些冷門雀液情況(由於這一塊變化太大,不確定當修改配置文件的時候是否所有涉及到的配置文件都修改了),我們可以先通過圖形界面完成對應的功能配置。首先,使用nmtui啟動到網路配置窗口配晌,然後選擇對應的網卡,在配置卡中將隱藏的高級選項顯示出來,會頃賣物看到增補IP的對應選項。你可以先試試看。
④ freebsd英文桌面不能用中文輸入法(fcitx)
首先要搞清楚當前用戶的 SHELL 是 csh、bash 或其它,可以通過 echo $SHELL 或者 cat /etc/passwd 看當前的用戶設置。
如果是 csh 用 setenv,如果是 bash 則用 export,如廳沒備果搞清楚這察斗個應該就明白輸入法那個設和導出環境變數究竟應該用哪個命令了。
關於編譯 kernel 添加 option rl0 的問題,不同的網卡在 freebsd 上識別出來的名字是不一樣的,這里與 windows 都叫「本地鏈接不扮毀同,bsd 有 ln0、rl0、eth0 等,所以我相信這里要修改的東西也要視具體的情況。
⑤ 如何獲取本機MAC地址 和 IP
1. 利用UUID獲取
在Windows操作系統下,以Client-Sever模式進行通信時,運行時間庫為了區分每個介面,需要為個介面建立一個UUID(Universally Unique Identifiers),在Windows95/98版本下,UUID的創建是通過調用函數UuidCreate()完成的,其中的第2至8位元組包含了用戶的MAC地址。因此,一種比較快的獲取MAC地址的方法是創建一個UUID,然後分析UUID結構的第2至8位元組,既可獲取本機的MAC地址。示常式序如下:
static void GetMACaddress(void)
{
unsigned char MACData[6];
UUID uuid;
UuidCreate( &uuid ); // 要求操作系統創建一個新的UUID
for (int i=2; i<8; i++) // 獲取本機MAC地址
MACData[i - 2] = uuid.Data4[i];
PrintMACaddress(MACData);
}
void PrintMACaddress(unsigned char MACData[])
{
printf("MAC Address: X-X-X-X-X-X\n",
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}
這種方法只能用於Windows95/98操作系統。因為從安全的角度來看,在網路上散布本機的MAC地址存在著安全隱患,因此在Windows2000/xp操作系統中,微軟對函數UuidCreate()進行了修正,使之在生成UUID時,不藉助於本機的MAC地址。原來UuidCreate()完成的功能由函數UuidCreateSequential()完成。因此,如果在新的系統中採用這種方法,可用UuidCreateSequential()代替上述程序中的UuidCreate()函數。
另外,需要說明的是,這種方式只能用於單網卡主機。
2. 利用Net Bios協議獲取
這種方法在Windows 95/98/Me/NT/2000/XP下都適用,不過它要求網卡必須安裝正確,綁定了NetBios協議,並且機器正聯接在一個運行正常的NetBios網路上。如果主機未接在網上,即使用網卡運行正常,運行下述代碼,用戶也不會得到任何信息。
static void GetMACaddress(void)
{
unsigned char MAC Data[8]; // 定義存放 MAC地址的緩沖區 (至少6位元組)
WKSTA_TRANSPORT_INFO_0 *pwkti;
DWORD dwEntriesRead;
DWORD dwTotalEntries;
BYTE *pbBuffer;
// 通過 NetBIOS的枚舉函數獲取MAC地址
NET_API_STATUS dwStatus = NetWkstaTransportEnum(
NULL, // [input] 伺服器名,0指本機
0, // [input] 0指函數返回指向WKSTA_TRANSPORT_INFO_0結構的指針
&pbBuffer, // [output] 指向緩沖區指針
MAX_PREFERRED_LENGTH, // [input] 緩沖區最大長度
&dwEntriesRead, // [output] 用於記錄實際元素個數
&dwTotalEntries, //
NULL); //[input/output] 恢復句柄
assert(dwStatus == NERR_Success);
pwkti = (WKSTA_TRANSPORT_INFO_0 *)pbBuffer; // 指針類型轉換
for(DWORD i=0; i< dwEntriesRead; i++)
{ // 讀取並列印MAC地址
swscanf((wchar_t *)pwkti[i].wkti0_transport_address,
L"%2hx%2hx%2hx%2hx%2hx%2hx",
&MACData[0],
&MACData[1],
&MACData[2],
&MACData[3],
&MACData[4],
&MACData[5]);
PrintMACaddress(MACData);
}
// 釋放緩沖區
dwStatus = NetApiBufferFree(pbBuffer);
assert(dwStatus == NERR_Success);
}
3. 利用GetAdaptersInfo()函數獲取
此方法利用了Windows SDK 中的函數GetAdaptersInfo(),對於用戶來講,編程很簡單,而且適用於Windows 95/98/Me/NT/XP等操作系統,並且不要求主機必須接在網路上,要求的只有一點,就是網卡在Windows下必須是可用的。同時,需要說明的是,GetAdaptersInfo()是一個功能非常強大的函數,它不但可以得到本機的MAC地址,而且可以得到許多其它相關信息。詳細內容可參見MSDN中有關IP_ADAPTER_INFO結構的說明。
static void GetMACaddress(void)
{
IP_ADAPTER_INFO AdapterInfo[16]; // 定義網卡信息存貯區。
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD dwStatus = GetAdaptersInfo(
AdapterInfo, // [output] 指向接收數據緩沖指針
&dwBufLen); // [input] 緩沖區大小
assert(dwStatus == ERROR_SUCCESS); // 此處是個trap,用來保證返回值有效
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
do {
PrintMACaddress(pAdapterInfo->Address); // 列印MAC地址
pAdapterInfo = pAdapterInfo->Next;
}
while(pAdapterInfo);
}
本程序中定義了一個長度為16的IP_ADAPTER_INFO結構類型的數組,因此用戶主機安裝的網卡數不能超過16塊,這在一般情況下都是可以滿足的,如果出現超過16塊的情況,用戶需修改此項設置,或採用動態申請存貯空間的方式解決。
4.結束語
以上三種方法均在Visual C++ 6.0、Windows2000 環境下編譯通過並工作正常。需要說明的是,示常式序只是提供了一種解決問題的思路,從軟體工程的角度來看,有些不盡人意的地方,讀者可以根據自己的編程需要進行修改。
5,獲取IP
void CheckIP(void)
{
WSADATA wsaData;
char name[155];
char *ip;
PHOSTENT hostinfo;
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 ) {
if( gethostname ( name, sizeof(name)) == 0) {
if((hostinfo = gethostbyname(name)) != NULL) { //這些就是獲得IP的函數
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
printf("%s\n",ip);
}
}
WSACleanup( );
} }