LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1829|回复: 10

我得到了一个IP数据包,怎么修改里面的内容呢

[复制链接]
发表于 2008-7-9 12:14:58 | 显示全部楼层 |阅读模式
我得到了一个IP数据包,怎么修改里面的内容呢,谢谢各位大哥了,小妹不胜感激!!!
发表于 2008-7-9 14:33:17 | 显示全部楼层
在网上搜一下"深入Linux网络核心堆栈"这篇文章吧,在网络层修改ip内容并且提交给传输层的华只能用netfilter了,需要掌握内核编程.
回复 支持 反对

使用道具 举报

发表于 2008-7-9 14:34:46 | 显示全部楼层
[color="Red"]小妹不胜感激
:%

ip包也就是一段数据了, 你想改甚么就直接在里面改就是了 ^_^

[color="Red"]假如是tcp的话:

struct tcphdr *tcpp;
tcpp = (struct tcphdr *)buffer;
tcpp->th_urp=1;

但是要看你的包是从哪一层抓来的了, 如果包里面还包含了链路层,ip层,等等
那么相应的跳过不需要的数据就可以了,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-10 08:54:26 | 显示全部楼层
Post by asert;1872764
在网上搜一下"深入Linux网络核心堆栈"这篇文章吧,在网络层修改ip内容并且提交给传输层的华只能用netfilter了,需要掌握内核编程.


我是要在应用层修改的,就是在我自己写的程序里面修改,我用libpcap抓到了一些IP包,然后就想修改一下里面的内容,不知道怎么实现呢??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-10 08:57:52 | 显示全部楼层
Post by dajun;1872765
:%

ip包也就是一段数据了, 你想改甚么就直接在里面改就是了 ^_^

[color="Red"]假如是tcp的话:

struct tcphdr *tcpp;
tcpp = (struct tcphdr *)buffer;
tcpp->th_urp=1;

但是要看你的包是从哪一层抓来的了, 如果包里面还包含了链路层,ip层,等等
那么相应的跳过不需要的数据就可以了,



我是要在应用层修改的,就是在我自己写的程序里面修改,我用libpcap抓到了一些IP包,然后就想修改一下里面的内容,不知道怎么实现呢??不能直接修改吧,我想修改以后再用libnet发送出去的。我就是要改变数据包的走向
回复 支持 反对

使用道具 举报

发表于 2008-7-10 13:37:35 | 显示全部楼层
如果你在两台机器之间监听,那么pcap抓包的同时是不是把包发出去了呢?(你需要研究一下)
就是你只是得到了那个包的一个copy, 你并没有影响到数据通信,
那么假如目的地的机器处理完了那个包, 你再发,恐怕有点晚了


ps: 上pp
回复 支持 反对

使用道具 举报

发表于 2008-7-10 13:42:34 | 显示全部楼层
另外, 既然你都知道libpcap/libnet了, 那么还不简单?
既然你抓到包了, 又想用libnet发, 那么最笨的方法是按照pcap给你的包的内容+你要改的地方
, 用libnet_buildxxx() build出一个新包, 发送之
回复 支持 反对

使用道具 举报

发表于 2008-7-10 13:49:07 | 显示全部楼层
http://tripp.dynalias.org/   被盾了

TRIPP is a utility to rewrite incoming and outgoing IP packets.
Since it can rewrite both headers and payload, it can be used to configure
the tcp/ip stack behavior in order to perform various tasks mainly intended
for network tests, simulations and development.

It is configured via a small rule-based language, which allows the user to intercept
packets, set arbitrary header values, increment or decrement numeric header fields,
set an arbitrary payload, rewrite parts of the payload, or fragment, delay, multiply,
or drop packets.

It is totally user-level and doesn't require any kernel module.



Sample Applications (see docs for examples):
   [o] test network applications
   [o] test firewalls, IDS ecc..
   [o] passive os fingerprint spoofing
   [o] authenticate connections to OpenBSD pf
   [o] customize packets sent by network scanners
   [o] test/evade (weak) IDS/IPS via ip fragmentation (like fragroute)
   [o] generate network anomalies
   [o] inject a custom bytestream into active connections and potentially trigger software bugs
   [o] forward packets between hosts
   [o] maybe many other little things... (ie quickly rewrite session cookies)



WARNING: the packet delayer doesn't work correctly: due to the usleep() resolution in
multithreaded apps the packets can be delayed for a time NOT LESS than 10ms! This is
true for Linux and OpenBSD, on Darwin (MacOSX) the delayer will work correctly.
On Linux and OpenBSD it's possible to use the packet delayer with a resolution of
10ms, i.e a rule like OUT(tcp)delay(1) will delay all outgoing tcp packets by 10ms
OUT(tcp)delay(50) will delay pkts by 500 ms and so on..
I'm working on fixing it..





Dependences:
      libpcap





我也没怎么研究过, 你看看这个东东吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-10 16:31:25 | 显示全部楼层
Post by dajun;1873047
如果你在两台机器之间监听,那么pcap抓包的同时是不是把包发出去了呢?(你需要研究一下)
就是你只是得到了那个包的一个copy, 你并没有影响到数据通信,
那么假如目的地的机器处理完了那个包, 你再发,恐怕有点晚了


ps: 上pp


我觉得你说的有道理,我也知道,比如我得到了一个包,在修改里面的数据,但是包都已经发送出去了,那怎么办呢,我也在这里想了好久,不知道这样的话是否要和内核打交道,先通知内核丢掉这个包,但是我是新手,不知道怎么弄,里面的函数之类的不太懂???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-10 16:34:59 | 显示全部楼层
Post by dajun;1873051
另外, 既然你都知道libpcap/libnet了, 那么还不简单?
既然你抓到包了, 又想用libnet发, 那么最笨的方法是按照pcap给你的包的内容+你要改的地方
, 用libnet_buildxxx() build出一个新包, 发送之

但是就像你之前说的那样,我得到的包会不会已经发送了呢,我必须确保在原来的包的基础上修改后发送,改变数据包的流向,谢谢??
你上传的那个是一个安装包还是一些代码的集合呢,是不是就用你上传的那个就可以修改数据包呢??
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表