Sendip是一个linux平台的命令行发数据包工具,目前(2018年2月)支持的协议有ipv4、ipv6、icmp、tcp、udp、bgp、rip、ntp,作者表示其他协议将会后面支持,当他有空写的时候。Sendip很强大,它支持自定义头部和数据(也就是IP层以上的整个包),没有过多的限制,所以连源IP都可以随意写,而且里面也提供了一些默认的选项,可以择需而发,非常方便。又因为它是命令行的,还支持从文件中直接读取整个packet发送,所以适合用脚本批量测试。它只是个发包工具,对于发出去的包,收到了什么样的回复,Sendip是不知道的,所以要得到回复的包就只能用抓包工具了。它的源码也很简单,没有过多平台相关的代码,如果不理解也可以看源码。
其实这个工具已经满足了我的要求,之前下载的PackETH
是GUI版的,连数据链路层(link layer)都支持,也要求必须提供这一层的相关信息才能发包,这一层一般不太关心,它又不提供自动封装,总的来说不太适合用。
Sendip简单使用
常见协议可参考常见协议TCP、UDP、IP图
通用选项:
-d 要携带的数据。
-f 从文件中读取要携带的数据。
-p 加载协议模块,只有加载了才能使用。
-v 打印整个发出的包。
ipv4模块:
-iv x 版本 Default: 4
-ih x 首部长度 Default: Correct
-iy x 区分服务 Default: 0
-il x 总长度 Default: Correct
----------------------------------------------
-ii x 标识 Default: Random
-ifr x 标志 Default: 0 (options are 0,1,r)
-if x 片偏移 Default: 0
----------------------------------------------
-it x 生存时间 Default: 255
-ip x 协议 Default: 0, or set by underlying protocol
-ic x 首部检验和 Default: Correct
----------------------------------------------
-is x 源地址 Default: 127.0.0.1
----------------------------------------------
-id x 目的地址 Default: Correct
----------------------------------------------
下面全是可选字段:
-ifd x IP don't fragment flag (see README)
Default: 0 (options are 0,1,r)
-ifm x IP more fragments flag (see README)
Default: 0 (options are 0,1,r)
-ionum x
IP option as string of hex bytes (length is always correct)
Default: (no options)
-ioeol IP option: end of list
-ionop IP option: no-op
-iorr x
IP option: record route. Format: pointer:addr1:addr2:...
-iots x
IP option: timestamp. Format: pointer:overflow:flag:(ip1:)ts1:(ip2:)ts2:...
-iolsr x
IP option: loose source route. Format: pointer:addr1:addr2:...
-iosid x
IP option: stream identifier
-iossr x
IP option: strict source route. Format: pointer:addr1:addr2:...