Python 发包收包利器 - scapy

前言

众所周知,我们每天上网都会有很多数据包需要发送,然后处理在接受在发送,这样一个循环往复的过程

图片

这里就显示了很多数据包的发送接收数据,那什么是包呢?下面一起看看

包( packet )是网络通信传输中的数据单位,一般称之为数据包,其主要由源地址,目标地址,净载数据组成

它包括包头和包体,包头是固定长度,包体长度不变

简单了解下包的定义,下面我们来看看发包利器 scapy 的用法吧

 

一、常用命令

1、ls():显示所有支持的数据包对象,可带参数也可不带,参数可以是任意具体的包

图片

可以看出,它包含了全部的内容,如果我们想详细查看某个模块中的内容,比如说我想查看 ARP ,tcp 的话了,可以这样:

图片

在这里要告诉大家的是,我们必须要注意大小写,ls(ARP)这样才可以得出正确结果,ls(arp)是错误的。

 

2、lsc():列出所有函数

图片

满屏的英文,我头都是大的,不知道大家此时此刻是什么样的心情,哈哈哈哈

 

3、hide_defaults():用来删除一些用户提供的那些和 default value 相同的项目

​​​​​​​

a=IP()print(a.hide_defaults())

 

4.display():可以简单查看当前 packet 的各个参数的取值情况,

​​​​​​​

a=IP()a.display()

 

5.更多命令

命令                                  作用show_interfaces()                  显示网卡信息
str(pkt)                            组装数据包
hexdump(pkt)                        十六进制转储
ls(pkt)                          显示出字段值的列表
pkt.summary()                        一行摘要
pkt.show()                      针对数据包的展开视图
pkt.show2()             显示聚合的数据包(例如,计算好了的校验和)
pkt.sprintf()                   用数据包字段填充格式字符串
pkt.decode_payload_as()         改变payload的decode方式
pkt.psdump()                绘制一个解释说明的PostScript图表
pkt.pdfdump()                   绘制一个解释说明的PDF
pkt.command()       
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用VPP进行收包发包的插件示例: 1. 接收插件示例: ``` #include <vlib/vlib.h> static uword my_input_node (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 n_left_from, * from, * to_next; my_input_next_t next_index; my_input_trace_t * t; vnet_main_t * vnm = vnet_get_main(); from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { u32 n_left_to_next; vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); while (n_left_from > 0 && n_left_to_next > 0) { u32 bi0; vlib_buffer_t * b0; u32 next0; bi0 = from[0]; from += 1; n_left_from -= 1; to_next[0] = bi0; to_next += 1; n_left_to_next -= 1; b0 = vlib_get_buffer (vm, bi0); t = vlib_add_trace (vm, node, b0, sizeof (*t)); t->sw_if_index = vnet_buffer(b0)->sw_if_index[VLIB_RX]; next0 = MY_INPUT_NEXT_NORMAL; vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, bi0, next0); } vlib_put_next_frame (vm, node, next_index, n_left_to_next); } return frame->n_vectors; } ``` 2. 发送插件示例: ``` #include <vnet/vnet.h> #include <vnet/ip/ip.h> static u32 my_output_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 n_left_from, * from; u32 n_left_to_next, * to_next; my_output_next_t next_index; u32 pkts_sent = 0; vlib_frame_t *f; u32 thread_index = vm->thread_index; from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { u32 n_left_to_next; vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); while (n_left_from > 0 && n_left_to_next > 0) { u32 bi0; vlib_buffer_t * b0; u32 next0 = 0; u32 error0 = 0; u32 sw_if_index0; bi0 = from[0]; from += 1; n_left_from -= 1; to_next[0] = bi0; to_next += 1; n_left_to_next -= 1; b0 = vlib_get_buffer (vm, bi0); sw_if_index0 = vnet_buffer (b0)->sw_if_index[VLIB_TX]; vlib_buffer_advance (b0, -sizeof (ethernet_header_t)); ethernet_header_t *eth = vlib_buffer_get_current (b0); eth->type = clib_host_to_net_u16 (ETHERNET_TYPE_IP4); if (PREDICT_FALSE (b0->flags & VLIB_BUFFER_IS_TRACED)) { my_output_trace_t *tr = vlib_add_trace (vm, node, b0, sizeof (*tr)); tr->sw_if_index = sw_if_index0; tr->next_index = next0; } vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, bi0, next0); pkts_sent++; } vlib_put_next_frame (vm, node, next_index, n_left_to_next); } vlib_node_increment_counter (vm, my_output_node.index, MY_OUTPUT_ERROR_TX, pkts_sent); return frame->n_vectors; } ``` 这里仅是简单的示例,实际使用中需要根据具体需求进行修改和完善。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值