python安全攻防---scapy使用

导入scapy包

from scapy.all import *

构造包

a = Ether()/IP(dst='114.114.114.114')/TCP(dport=80)/应用层数据

我们如果记不得每个包的选项使,可以使用show()来查看

print(a.show())

发送包

  1. sr(IP(dst=‘192.168.1.0/24’)/TCP(dport=(1,65535)), timeout=2) :发送三层数据包,等待接收一个或多个数据包的响应(注意:当依次向每个IP的65535个端口发送完才算执行完这个函数,而不是调用一次只发一个包,以下所有发包方式都与之一样)
  2. sr1() :发送三层数据包,并仅仅只等待接收一个数据包的响应
  3. srp(Ether(dst=‘11:11:11:11:11:11’)/IP(dst=‘1.1.1.1’)/ICMP()): 发送二层数据包,并且等待回应(这个函数可以编辑二层头部,sr()不能编辑二层头部)
  4. send():仅仅发送三层数据包,不等待回包(发完就拉倒了)
  5. sendp():仅仅发送二层数据包,不等待回包

解析回包

  1. sr
reply_packet = sr(IP(dst='114.114.114.114')/ICMP(), timeout=2)print(reply_packet)
结果:返回的是元组
(<Results: TCP:0 UDP:0 ICMP:1 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)

第一个元素为接收到的包,第二个元素为没有收到的包

print(reply_packet[0].res)
结果:返回的是列表
[(<IP  frag=0 proto=icmp dst=114.114.114.114 |<ICMP  |>>, <IP  version=4 ihl=5 tos=0x0 len=28 id=32921 flags= frag=0 ttl=75 proto=icmp chksum=0xbb37 src=114.114.114.114 dst=172.20.163.23options=[] |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>)]

列表里面为所有回包情况,一个元素(元组)为一个回包. 其元组中第一个元素为发送的包,第二个元素为返回的包

查看回包各项属性:

print(reply_packet[0].res[0][1].fields)
结果:返回的是字典类型
{'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 56445, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 75, 'proto': 1, 'chksum': 24403, 'src': '114.114.114.114', 'dst': '172.20.163.23','options': []}

reply_packet[0].res[0][1]这一层就相当于是真正的回包包体了,包体可以用fields属性(返回字典)和show方法(返回字符串)来查看其内容. 而前面几层都是对数据包的一些统计描述.

  1. sr1
reply_packet = sr1(IP(dst='114.114.114.114')/ICMP(), timeout=2)print(reply_packet)  
结果:b'E\x00\x00\x1c\xe0\xd8\x00\x00H\x01]\xf8rrrr\xac\x14\xa3\x17\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

sr1返回的对象没有太多复杂东西,直接相当于sr返回对象的reply_packet[0].res[0][1],可以理解为sr1返回的对象是sr返回对象的一个子集.

print(reply_packet.fields)  
结果:字典类型{'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 19164, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 66, 'proto': 1, 'chksum': 63988, 'src': '114.114.114.114', 'dst': '172.20.163.23', 'options': []}

sr1的reply_packet == sr的reply_packet[0].res[0][1], 所以可以和sr一样直接用fields来读取其内容.

  1. srp
reply_packet = srp(Ether(dst='00:23:89:bb:c7:85')/IP(dst='114.114.114.114')/ICMP())print(reply_packet[0].res[0][1].fields)   
结果:返回类型是字典
{'dst': '00:0c:29:d9:3f:63', 'src': '00:23:89:bb:c7:85', 'type': 2048}

注意:这里默认只给出了二层头部,可以通过调节res后第三位的值来选择性查看每层信息,res的第三位[0]表示精确到第几层,[0]代表二层,[1]进一层到IP层,[2]进一步到传输层,[3]进一步到应用层
例:

print(reply_packet[0].res[0][1][1].fields)   
结果:{'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 62339, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 67, 'proto': 1, 'chksum': 20557, 'src': '114.114.114.114', 'dst': '172.20.163.23', 'options': []}print(reply_packet[0].res[0][1][2].fields)      
结果:
{'type': 0, 'code': 0, 'chksum': 65535, 'id': 0, 'seq': 0}print(reply_packet[0].res[0][1][3].fields)       
结果:{'load': b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}

抓包、分析包

  • prn指向一个回调函数,意为将收到的包丢给prn指向的函数处理(注意:回调的意义!每收到一个包就丢到回调函数里执行一下,执行完了才再跑回来继续抓包)

  • filter为包过滤规则(语法参照tcpdump过滤规则)

  • store为是否要存储抓到的包(注意,如果没有存储则不会将抓到的包赋值给a,因为没有存下就没有东西可以赋,此参数默认开启)

  • timeout为抓包时长,比如抓30秒就结束(注意:如果没有指定抓包时长则会一直抓下去,程序会一直卡在这里)

  • iface为指定抓包的网卡

a = sniff(prn=abc, filter='tcp port 80 and ip 192.168.1.1', store=1, timeout=30, iface='eth0')   

wrpcap('packet.cap', a) ======> 此函数可以将抓到的包存到本地(注意:将包写入本地不能使用open(‘packet.cap’, ‘r’),因为open函数只能写入字符串)。

bbb = rdpcap('/root/桌面/ftp_pcapng.cap') =======> 此函数可以将本地存储的数据包读取出来

for i in bbb: =======> 读取出来的对象是由N个数据包组成的可迭代对象,每次迭代一个包

try: ======> 有些包可能没有要提取的对象,当提取包里没有的属性时则会报错,所以捕获异常好让程序继续往下执行print(i.getlayer('Raw').fields['load'].decode().strip())     ======> 输出数据包的应用层负载except :continue

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

唉!

学习到后面时&#xff0c;再返回看了一下前面学过的&#xff0c;发现以前学过&#xff0c;看不懂的东西现在能看懂了…… &#xff01;不过 为什么在刚学时就是不懂&#xff0c;这样 不就老是慢一拍吗&#xff1f;唉&#xff01;&#xff01;转载于:https://www.cnblogs.com/ni…

Java—— TCP协议(相关代码实现以及相关优化)

代码运行的时候先运行服务端&#xff0c;然后在运行客户端 * TCP协议&#xff1a;* 1&#xff0c;客户端* 创建Socket连接服务器(指定IP地址&#xff0c;端口号)通过IP地址找到对应的服务器* 调用Socket的getInputStream()和getOutputStream()方法获取和服务器端相连…

什么是adsense 想通过广告挣钱的看过来

Adsense的含义Google AdSense是由Google公司推出的针对网站主&#xff08;简称发布商&#xff09;的一个互联网广告服务。AdSense是个合成词。其中ad是“广告”之意&#xff0c;sense是“感知”之意&#xff0c;综合起来的意思就是相关广告。Google通过程序来分析网站的内容&am…

Java GregorianCalendar getTimeZone()方法与示例

GregorianCalendar类的getTimeZone()方法 (GregorianCalendar Class getTimeZone() method) getTimeZone() method is available in java.util package. getTimeZone()方法在java.util包中可用。 getTimeZone() method is used to return the time zone for this GregorianCale…

python安全攻防---信息收集---ICMP主机探测 以及optionparser的使用

0x01 基础概念 ICMP&#xff08;Internet control Message Protocal&#xff09;Internet报文协议&#xff0c;是TCP/IP的一种子协议&#xff0c;属于网络层协议&#xff0c;其目的是用于在IP主机、路由器之间传递控制信息 0x02 程序 程序 # -*- coding:utf-8 -*- from sca…

PHP文件系统-文件下载

一、网页请求和响应的过程 请求&#xff1a; 1. HTTP 1.1 协议 版本 2. 头信息&#xff0c;请求的ip&#xff0c;其他 3. 你请求的表单信息, 你提交给服务器的信息 http://localhost/one.php?aabbb&cccdd 响应&#xff1a; 1. 状态 200 ok 404 页面没找到 2. 响应头信息&a…

Java——网络编程练习

练习一(黑马程序员面试题)&#xff1a;客户端向服务器写字符串(键盘录入)&#xff0c;服务器(多线程)将字符串反转后写回&#xff0c;客户端再次读取到的是反转后的字符串 相关代码如下&#xff1a; package com.wsq.test;import java.io.BufferedReader; import java.io.Buf…

第一章 基础知识---1.4Crack小实验--复现

0x01 程序及其编译环境 程序如下&#xff0c;功能&#xff1a;我们必须输入正确的密码1234567才能得到密码验证的确认&#xff0c;跳出循环。否则程序提示密码错误再次输入。 #include <stdio.h>#define PASSWORD "1234567"int verify_password(char* passwo…

.net中调用exchange服务器发邮件

普通的邮件, 用System.Net.Mail 类 或 System.Web.Mail 类 处理即可, 但是Exchange Server 环境下, 这两个类起不了作用-------至少目前我看到的情况如此. 整个过程如下: 1. 先添加COM 引用 "Microsoft CDO for Windows 2000 Library" .2. 发送邮件的代码: CDO.Messa…

Java Double类doubleToLongBits()方法与示例

Double类doubleToLongBits()方法 (Double class doubleToLongBits() method) doubleToLongBits() method is available in java.lang package. doubleToLongBits()方法在java.lang包中可用。 doubleToLongBits() method follows IEEE 754 double floating-point standards and …

Firefox(火狐浏览器)彩蛋

①在地址栏上输入&#xff1a; about:mozilla ②在地址栏上输入&#xff1a; about:robots ③在地址栏上输入&#xff1a; www.figma.com/404/ ④地址栏上输入&#xff1a; chrome://global/content/alerts/alert.xul

jquery.history插件在ie中失效的问题

hash标志中不能有? ff中不存在这个问题。 转载于:https://www.cnblogs.com/xyun/archive/2008/12/01/1345188.html

Java——反射(Class.forName()读取配置文件举例).

榨汁机(Juicer)榨汁机的案例&#xff1a; 分别有水果(Fruit),苹果(Apple)&#xff0c;香蕉(Bananal)&#xff0c;橘子(Orange),榨汁(squeeze) 要求&#xff1a; 榨出不同的水果汁来喝 //一般方法求解 package com.testl;public class Text1 {public static void main(Strin…

java 根据类名示例化类_Java类类getEnclosingClass()方法及示例

java 根据类名示例化类类的类getEnclosingClass()方法 (Class class getEnclosingClass() method) getEnclosingClass() method is available in java.lang package. getEnclosingClass()方法在java.lang包中可用。 getEnclosingClass() method is used to return recent or im…

C++:cin.getline

转&#xff1a;百度百科 http://baike.baidu.com/view/2383876.htm cin.getline 此函数是按行读取,其语法为:cin.getline(字符指针,字符个数N,结束符); 功能是&#xff1a;一次读取多个字符(包括空白字符&#xff09;&#xff0c;直到读满N-1个&#xff0c;或者遇到指定的结束符…

端口复用和重映射--STM32F103

什么是端口复用&#xff1f; STM32中有很多内置外设&#xff0c;这些外设的引脚都是与GPIO复用的&#xff0c;什么时候复用呢&#xff1f;就是当一个GPIO作为内置外设引脚使用时&#xff0c;就叫做复用。比如串口1的发送接收引脚是PA9&#xff0c;PA10&#xff0c;当PA9&#…

考研数学

眼前俨然一副冬的气象&#xff0c;伴随气温的骤降&#xff0c;考研复习也进入异常紧张的阶段。在考试前这两个月里&#xff0c;考生如何复习数学&#xff0c;成绩还可以有所提高。万学?海文数学教研组针对冲刺阶段数学复习归纳总结以下复习经验和建议&#xff0c;供大家参考。…

一个很好的自学网站~推荐一下

http://www.51zxw.net/study.asp?vip15746908

[转]Ubuntu远程桌面登陆

原文地址&#xff1a;http://www.cnblogs.com/xdzone/archive/2011/03/10/1979644.html 1.xp下默认的远程桌面协议是rdp&#xff0c;默认端口3389&#xff0c;而ubuntu用的时vnc&#xff1a;默认端口5900 2.首先被访问的主机&#xff08;windows/linux&#xff09;都要设置为允…

NVIC中断管理---STM32

NVIC&#xff1a;嵌套向量中断控制器 在了解中断之前&#xff0c;我们先了解抢占优先级和响应优先级 抢占优先级和响应优先级 抢占优先级决定能不能打断&#xff0c;高优先级的抢占可以中断低优先级的抢占响应优先级在抢占优先级相同时&#xff0c;高响应优先级先执行&#x…