linux如何修改ip資料報

2021-04-16 19:01:26 字數 2807 閱讀 5105

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...