libipq動態防火牆的入門實驗

2021-06-18 22:40:42 字數 2092 閱讀 8183

實驗要求如下:

1.配置自己的網路,讓虛擬機器和主機能相互ping通,我使用的網路是,主機vmnet8的ip為192.168.48.1,也就是windows的網路位址。因為我使用的是nat網路,vmware自動把本地連線對映成vmnet8,相當於路由器,然後虛擬機器裡的ip被自動分配為192.168.48.129,網路是通的。

2.設定iptables過濾規則為:所有從主機發出的icmp包全部到自己編寫的應用程式。

3.編寫應用程式,功能如下

允許從主機出發,目的位址為192.168.48.129的包

丟棄其他任何的icmp包

出錯時要進行錯誤處理,能夠清理占用資源,退出程式

實驗步驟如下:

安裝軟體iptables,iptables-dev開發包,安裝libnet1,libnetl-dev,其中iptables為linux下的早期防火牆,而libnet則是linux下構造資料報的工具,文件比較齊全,使用比較方便,linux下的的捕獲資料報用libpcap,本實驗中沒有用到,建議真正想在linux下網路程式設計的人要使用libnet和libpcap。

安裝好工具後,就開時程式設計序了。

設定過濾環境

載入過濾需要的核心模組

–# modprobe iptable_filter

–# modprobe ip_queue

設定過濾規則 –

iptables -a output -p icmp -j queue

編寫應用程式

:程式框架

ipq_create_handle()

->ipq_set_mode()

->

包過濾處理迴圈

while(1)

->ipq_destroy()  

實驗**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define bufsize 2048

static void die(struct ipq_handle *h)

int main(int argc, char **argv)

char *dst = libnet_addr2name4(iph->ip_dst.s_addr, libnet_dont_resolve);

if(!strcmp(dst, ip_dst_s))

else

if (status < 0)

die(h);

break;

}default:

fprintf(stderr, "unknown message type!\n");

break;

}} while (1);

ipq_destroy_handle(h);

return 0;}

至於實驗結果就不帖了,讀者想知道就自己編譯一下測試測試

編譯方法是:

gcc test.c -lipq -lnet

實驗體會:

很多軟體都定義了一些相同的資料結構,但是名字不同,感覺這是一大缺陷,比如

ip header,

實驗手冊中給的是

linux/ip.h

中的struct iphdr

,libnet

中libnet-headers.h

有struct libnet_ipv4_hdr

和struct libnet_ipv6_hdr

,分析snort

原始碼時,

snort

也定義了乙個自己的

typedef struct _iphdr iphdr;,

對同一資料結構進行了多次的不同的定義,明顯感覺有的復用性沒有達到,我選擇了

libnet_ipv4_hdr

,因為手頭有

libnet

的手冊,查詢比較方便。就應該開發一套通用的放到

c語言規範裡,這樣可以避免大量的重複勞動,而且程式設計師也不需要有太大的負擔

0

給主人留下些什麼吧!~~

防火牆入門

網路各層中,給防火牆提供判別依據有,1 連線層 desctination,source的mac位址。2 網路層 header length,differentiated service,total length,flags,time to live,protocol,source,destinati...

小白入門防火牆iptables

iptables防火牆 檢視4表5鏈 man iptables 4表 1 filter 篩選作用,最常用 2 nat 3 mangle 硬體常使用 4 raw 5鏈 包含在4表裡面,1 input 2 output 3 prerouteing 4 postrouting 5 forward 檢視表 ...

透明防火牆才是純粹的防火牆

早在上大學時就有乙個疑問,為什麼防火牆看起來像是一台路由器,為了引入乙個防火牆,你起碼要多申請2個ip位址,還要配置複雜的路由保證通路,為了上述保證,你不得不重新規劃你的網路,最最麻煩的就是為你的那個防火牆分配的那個ip位址,該位址可能會成為攻擊者進入內部網的入口。到底是誰在保護誰啊?真正意義的純粹...