dsr0.0.1程式存檔及說明---如何修改ip資料報
2007-10-08 19:41:38
對傳送的資料報的資料報型別進行修改
改為dsr型別,設dsr型別的值為24
同時加入dsr選項,儲存原來的資料型別
接收的資料報為逆過程
還原原資料報的資料型別
去掉dsr選項
實現的效果
只用同時執行該程式的機子可以進行通訊
無法其他機子的正常通訊
單機測試效果
ping自己的機子可以ping通
但ping其他的機子則不行
本程式算是我的第乙個程式吧
主要目的是實驗ip資料報的修改方法,以便進一步的程式設計,可以說是小實驗吧
對於如何修改ip資料報作了詳細的說明和**演示
可以為以後程式設計作參考
特此存檔以便後查
測試核心為2.6.20
==========================================
/*dsr處理程式dsr.c*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define dsr 24
//定義兩個結構體,以便向鉤子函式註冊
static struct nf_hook_ops nfho1;
static struct nf_hook_ops nfho2;
//傳送處理程式,截獲傳送的資料報,新增dsr頭部(4位元組),將有的協議型別更換為dsr型別
unsigned int dsr_send(unsigned int hooknum,struct sk_buff **skb,const struct net_device *in,const struct net_device *out,int (*okfn)(struct sk_buff *))
if(iph_n->protocol!=0)
//printk("a is %p/n b is %p/n",dsrh_addr,(*skb)->nh.iph);
(*skb)->nh.iph=memmove(dsrh_addr,iph_n,iph_len);//前移ip頭部
iph_n=(*skb)->nh.iph;
dsrh_addr+=iph_len;//確定dsr選項的位址
//dsr選項值設定
dsrh.nextheader=iph_n->protocol;
dsrh.reserved=00000000;
dsrh.length=0000000000000000;
memcpy(dsrh_addr,&dsrh,4);//選項值寫入記憶體相應區域
//更改協議型別為dsr,並校驗頭部
iph_n->protocol=dsr;
iph_n->tot_len=htons((*skb)->len);
ip_send_check(iph_n);
//printk("a2 is %p/n b2 is %p/n",dsrh_addr,(*skb)->nh.iph);
printk("send %i/n%i/n",iph_n->protocol,dsrh.nextheader);
//printk("the new skb_headroom is %i/n",skb_headroom(*skb));
return nf_accept; }
else
//return nf_accept; }
//接收處理函式,還原資料報的原有資料型別,去除dsr選項
unsigned int dsr_rcv(unsigned int hooknum,struct sk_buff **skb,const struct net_device *in,const struct net_device *out,int (*okfn)(struct sk_buff *))
return nf_accept; }
//初始化函式,完成向鉤子函式的註冊
static int __init dsr_init(void)
//反註冊鉤子函式,module的出口
static void __exit dsr_exit(void)
module_init(dsr_init);
module_exit(dsr_exit);
==========================================
dsr.h檔案如下
#ifndef _dsr_h
#define _dsr_h
#include
struct dsr_header ;
#endif/*_dsr_h*/
==========================================
makefile檔案
obj-m +=dsr.o
kernelbuild := /lib/modules/`uname -r`/build/
cflags += -i/home/lightmusic/workspace/dsr/include/
default:
make -c $(kernelbuild) m=$(shell pwd) modules
clean:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions
==========================================
Linux如何修改靜態IP
linux修改靜態ip 在master主機上 1.vmware 編輯 虛擬網路編輯器 還原預設配置 重置網路設定 主要圖省事,為了使windows與虛 擬機同乙個段位 2.vmware 編輯 虛擬網路編輯器 選中vm8 關掉dhcp 不然系統會自動找那個動態的ip 子網 192.168.207.0 ...
IP資料報格式
版本字段長度為4,用來表明建立資料報的ip版本,目前的ip版本是ipv4,ipv6正在發展中。ipv4的字段為0100 首部長度 報頭長度 指的是首部佔32 bit字的數目,包括任何選項。由於它是乙個4位元字段,因此首部最長為60個位元組。15x32 8 60位元組.ip首部始終是32 bit的整數...
解析IP資料報
include stdafx.h include winsock2.h include ws2tcpip.h include iostream.h include stdio.h typedef struct ip header byte servicetype 服務型別 word totallen...