精华内容
下载资源
问答
  • 协同过滤中最常用到的三种相似度的测量方法比较
    千次阅读
    2018-07-22 15:52:53

    person系数:

    sim(i,j)=corri,j=uU(Ru,iRi¯¯¯¯¯¯)(Ru,jRj¯¯¯¯¯¯)(Ru,iRi¯¯¯¯¯¯)2(Ru,jRj¯¯¯¯¯¯)2 s i m ( i , j ) = c o r r i , j = ∑ u ∈ U ( R u , i − R i ¯ ) ( R u , j − R j ¯ ) ( R u , i − R i ¯ ) 2 ( R u , j − R j ¯ ) 2

    针对两个向量而言,要求两个向量中的各个分量的含义是一致的,更通俗的说是针对两个变量,通过计算这两个变量的person系数来衡量两个变量之间的相似性,在协同过滤中也就是计算两个item之间的相关程度。

    余弦相似度:

    sim(i,j)=cos(i⃗ ,j⃗ )=i⃗ j⃗ i⃗ 2×j⃗ 2 s i m ( i , j ) = c o s ( i → , j → ) = i → ⋅ j → ‖ i → ‖ 2 × ‖ j → ‖ 2

    针对两个向量而言,对两个向量的分量的含义是否一致并没有特别的要求。也就是说,在得分矩阵中,既可以是针对item之间的相关程度的衡量,也可以是两个用户之间的相关程度的衡量。

    修正余弦相似度:

    sim(i,j)=uU(Ru,iRi¯¯¯¯¯¯)(Ru,jRj¯¯¯¯¯¯)(Ru,iRi¯¯¯¯¯¯)2(Ru,jRj¯¯¯¯¯¯)2 s i m ( i , j ) = ∑ u ∈ U ( R u , i − R i ¯ ) ( R u , j − R j ¯ ) ( R u , i − R i ¯ ) 2 ( R u , j − R j ¯ ) 2

    • 修正余弦相似度 & 余弦相似度 的区别:
      在余弦相似度上进行修正后得到修正余弦相似度,修正余弦相似度提出的前提:对于有些用户来说3分以上已经是属于喜欢的范畴了,但是对于有些用户而言4分以上才是喜欢的范畴,因此在计算的时候以用户的平均打分作为中心化标准进行修正每个用户在已有打分的item上的打分(忽略了未打分的item)。

    • person系数 & 修正余弦相似度 的区别:
      person中心化的标准是该item的打分均值
      修正余弦相似度是该user的打分均值

    • 余弦相似度 & person系数与修正余弦相似度 的区别:
      余弦相似度计算时包括了用户所有信息,也就是说包括缺省的打分信息(缺省的地方赋0值)
      person系数与修正余弦相似度进行计算时只包括了两个用户都进行了打分的item上的信息(忽略缺省的地方)

    更多相关内容
  • Wireshark 常用过滤使用方法

    千次阅读 2019-11-15 20:03:33
    文章目录一、常用过滤方法二、常用的使用方式、TCP 连接:SYN,ACK,RST,UTG,PSH,FIN 一、常用过滤方法 过滤源 ip、目的 ip 在 wireshark 的过滤规则框 Filter 中输入过滤条件。 如查找目的地址为192.168.101....

    一、常用过滤方法

    1. 过滤源 ip、目的 ip
      在 wireshark 的过滤规则框 Filter 中输入过滤条件。
      如查找目的地址为192.168.101.8的包,ip.dst==192.168.101.8
      查找源地址为ip.src==1.1.1.1
    2. 端口过滤
      如过滤 80 端口,在 Filter 中输入,tcp.port==80,这条规则是把源端口和目的端口为80的都过滤出来。
      使用tcp.dstport==80只过滤目的端口为 80 的,tcp.srcport==80只过滤源端口为 80 的包
    3. 协议过滤
      比较简单,直接在Filter框中直接输入协议名即可,如过滤HTTP的协议
    4. http 模式过滤
      如过滤 get 包,http.request.method=="GET",过滤 post 包,http.request.method=="POST"
    5. 连接符 and 的使用
      过滤两种条件时,使用and连接,如过滤 ip192.168.101.8并且为http协议的,ip.src==192.168.101.8 and http

    二、常用的使用方式

    1. 调整时间格式
      在这里插入图片描述
      根据时间字段,然后再排序下
      在这里插入图片描述
    2. 根据端口过滤
      服务端端口是 7018,和客户端建立 socket 连接,根据服务端的端口找到2者通信的所有socket数据(客户端进入房间后会异常断开,判断是客户端导致的还是服务端导致的)
      tcp.port==7018,最后的RST报文是服务端发起的,说明是服务端主动断开的,缩小问题范围
      在这里插入图片描述
      仅从抓包信息看是服务器的一个流量控制机制启动了。服务器发回rst位,同时win置为0,是告诉客户端不要发包。按tcp流控机制来说,此时客户端应该停止发包,直至服务器发送信息告诉客户端可以继续发送。

    三、TCP 连接:SYN,ACK,RST,UTG,PSH,FIN

    三次握手:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;
    接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;
    最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。

    *SYN:同步标志
    同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。
    在这里,可以把 TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。
    在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

    *ACK:确认标志
    确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

    *RST:复位标志
    复位标志有效。用于复位相应的TCP连接。

    *URG:紧急标志
    紧急(The urgent pointer) 标志有效。紧急标志置位,

    *PSH:推标志
    该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。

    *FIN:结束标志
    带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

    TCP的几个状态对于我们分析所起的作用。在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。
    其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。
    TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。
    RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;
    而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。
    PSH为1的情况,一般只出现在DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

    展开全文
  • tcpdump常用与高级过滤方法整理

    千次阅读 2019-05-06 11:27:46
    下面介绍两种过滤方法(第一方法比较操蛋,可忽略): a. 比较第一字节的值是否大于01000101 这可以判断IPv4带IP选项的数据和IPv6的数据。 01000101十进制等于69,计算方法如下(小提示:用计算器更方便) 0 ...

    1.命令格式

    tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名]
    [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]

    2.选项介绍

    参数含义
    -a将网络地址和广播地址转变成名字
    -d将匹配信息包的代码以人们能够理解的汇编格式给出
    -dd将匹配信息包的代码以c语言程序段的格式给出
    -ddd将匹配信息包的代码以十进制的形式给出
    -e在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议
    -f将外部的Internet地址以数字的形式打印出来
    -l使标准输出变为缓冲行形式
    -n指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字
    -nn指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
    -t在输出的每一行不打印时间戳
    -v输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
    -vv输出详细的报文信息
    -c在收到指定的包的数目后,tcpdump就会停止
    -F从指定的文件中读取表达式,忽略其它的表达式
    -i指定监听的网络接口,后面跟数组“any”表示针对所有接口
    -p将网卡设置为非混杂模式,不能与host或broadcast一起使用
    -r从指定的文件中读取包(这些包一般通过-w选项产生)
    -w直接将包写入文件中,并不分析和打印出来
    -s snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示68字节数据包
    -T将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议
    -X告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器

    使用案例

    参数 -l

    -l选项的作用就是将tcpdump的输出变为“行缓冲”方式,这样可以确保tcpdump遇到的内容一旦是换行符即将缓冲的内容输出到标准输出,以便于利用管道或重定向方式来进行后续处理。

    Linux/UNIX的标准I/O提供了全缓冲、行缓冲和无缓冲三种缓冲方式。
    标准错误是不带缓冲的,终端设备常为行缓冲,而其他情况默认都是全缓冲的。
    例如我们只想提取包的每一行的第一个域(时间域),这种情况下我们就需要-l将默认的全缓冲变为行缓冲了。
    tcpdump -i eth0 port 1111 -l | awk ‘{print $1}’
    在这里插入图片描述
    参数–w -r

    -w 直接将包写入文件中(即原始包,如果使用 重定向 > 则只是保存显示的结果,而不是原始文件),即所谓的“流量保存”—就是把抓到的网络包能存储到磁盘上保存下来,为后续使用。参数-r 达到“流量回放”—就是把历史上的某一时间段的流量,重新模拟回放出来,用于流量分析。

    通过-w选项将流量都存储在cp.pcap(二进制格式)文件中了.可以通过 –r 读取raw packets文件 cp.pcap.
    如:sudo tcpdump i- eth0 ‘port 1111’ -c 3 -r cp.pcap 即可进行流量回放。

    3.常用过滤表达式

    tcpdump支持传入单个或多个过滤表达式,可以通过命令man pcap-filter 来参考过滤表达式的帮助文档
    过滤表达式大体可以分成三种过滤条件,“类型”“方向”“协议”逻辑运算其他关键字,这五种条件的搭配组合就构成了我们的过滤表达式

    3.1 “类型”关键字

    关于类型的关键字,主要包括hostnetport
    例如:
    host 210.45.114.211,指定主机 210.45.114.211
    net 210.11.0.0 指明210.11.0.0是一个网络地址
    port 21 指明端口号是21。如果没有指定类型,缺省的类型是host

    3.2 “方向”关键字

    关于传输方向的关键字,主要包括src,dst,dst or src,dst and src
    举例:
    src 210.45.114.211 ,指明ip包中源地址是210.45.114.211
    dst net 210.11.0.0 指明目的网络地址是210.11.0.0
    如果没有指明方向关键字,则缺省是src or dst关键字。

    3.3 “协议”关键字

    关于协议的关键字,主要包括 ether,ip,ip6,arp,rarp,tcp,udp等类型。
    如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

    3.4 逻辑运算

    tcpdump还支持三种逻辑运算:

    逻辑运算表示方法
    取与“and”或“&&”
    取或“or”或“ll“”
    取非“not”或“!”

    3.5 其他关键字

    tcpdump还在其他几种关键字:gateway、broadcast、less、greater

    3.6 使用案例

    可以利用这些关键字进行组合,从而组合为比较强大的过滤条件。下面举例说明

    (1)只想查目标机器端口是21或80的网络包,其他端口的我不关注:
    sudo tcpdump -i eth0 -c 10 ‘dst port 21 or dst port 80’

    (2) 想要截获主机172.16.0.11 和主机210.45.123.249或 210.45.123.248的通信,使用命令(注意括号的使用):
    sudo tcpdump -i eth0 -c 3 ‘host 172.16.0.11 and (210.45.123.249 or210.45.123.248)’

    (3)想获取使用ftp端口和ftp数据端口的网络包
    sudo tcpdump ‘port ftp or ftp-data’
    这里 ftp、ftp-data到底对应哪个端口? linux系统下 /etc/services这个文件里面,就存储着所有知名服务和传输层端口的对应关系。如果你直接把/etc/services里的ftp对应的端口值从21改为了3333,那么tcpdump就会去抓端口含有3333的网络包了。

    (4) 如果想要获取主机172.16.0.11除了和主机210.45.123.249之外所有主机通信的ip包,使用命令:
    sudo tcpdump ip ‘host 172.16.0.11 and ! 210.45.123.249’

    (5) 抓172.16.0.11的80端口和110和25以外的其他端口的包
    sudo tcpdump -i eth0 ‘host 172.16.0.11 and! port 80 and ! port 25 and ! port 110’

    4.高级包头过滤

    首先了解如何从包头过滤信息

    proto[x:y] : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排)
    proto[x:y] & z = 0 : proto[x:y]和z的与操作为0
    proto[x:y] & z !=0 : proto[x:y]和z的与操作不为0
    proto[x:y] & z = z : proto[x:y]和z的与操作为z
    proto[x:y] = z : proto[x:y]等于z

    操作符 : >, <, >=, <=, =, !=

    4.1、IP头

    在这里插入图片描述
    本文只针对IPv4。

    4.2、IP选项设置了吗?

    “一般”的IP头是20字节,但IP头有选项设置,不能直接从偏移21字节处读取数据。IP头有个长度字段可以知道头长度是否大于20字节。
    ±±±±±±±±+
    |Version| IHL |
    ±±±±±±±±+
    通常第一个字节的二进制值是:01000101,分成两个部分: 0100 = 4 表示IP版本 0101 = 5 表示IP头32 bit的块数,5 x 32 bits = 160 bits or 20 bytes
    如果第一字节第二部分的值大于5,那么表示头有IP选项。
    下面介绍两种过滤方法(第一种方法比较操蛋,可忽略):
    a. 比较第一字节的值是否大于01000101
    这可以判断IPv4带IP选项的数据和IPv6的数据。
    01000101十进制等于69,计算方法如下(小提示:用计算器更方便)
    0 : 0 \ 1 : 2^6 = 64 \ 第一部分 (IP版本)
    0 : 0 /
    0 : 0 /
    0 : 0
    1 : 2^2 = 4 \ 第二部分 (头长度)
    0 : 0 /
    1 : 2^0 = 1 /
    64 + 4 + 1 = 69

    如果设置了IP选项,那么第一自己是01000110(十进制70),过滤规则:
    tcpdump -i eth1 ‘ip[0] > 69’
    IPv6的数据也会匹配,看看第二种方法。
    b. 位操作

    0100 0101 : 第一字节的二进制
    0000 1111 : 与操作
    <=========
    0000 0101 : 结果
    正确的过滤方法
    tcpdump -i eth1 ‘ip[0] & 15 > 5’
    或者tcpdump -i eth1 ‘ip[0] & 0x0f > 5’

    4.3、分片标记

    当发送端的MTU大于到目的路径链路上的MTU时就会被分片,这段话有点拗口,权威的请参考《TCP/IP详解》。唉,32借我的书没还,只能凑合写,大家记得看书啊。

    分片信息在IP头的第七和第八字节:
    ±±±±±±±±±±±±±±±±+
    |Flags| Fragment Offset |
    ±±±±±±±±±±±±±±±±+
    Bit 0: 保留,必须是0
    Bit 1: (DF) 0 = 可能分片, 1 = 不分片
    Bit 2: (MF) 0 = 最后的分片, 1 = 还有分片
    Fragment Offset字段只有在分片的时候才使用。
    要抓带DF位标记的不分片的包,第七字节的值应该是:
    01000000 = 64
    tcpdump -i eth1 ‘ip[6] = 64’

    4.4、抓分片包

    匹配MF,分片包
    tcpdump -i eth1 ‘ip[6] = 32’
    最后分片包的开始3位是0,但是有Fragment Offset字段。
    匹配分片和最后分片
    tcpdump -i eth1 ‘((ip[6:2] > 0) and (not ip[6] = 64))’
    测试分片可以用下面的命令:
    ping -M want -s 3000 192.168.1.1

    4.5、匹配小TTL

    TTL字段在第九字节,并且正好是完整的一个字节,TTL最大值是255,二进制为11111111。
    可以用下面的命令验证一下:

    $ ping -M want -s 3000 -t 256 192.168.1.200
    ping: ttl 256 out of range
    ±±±±±±±±+
    | Time to Live |
    ±±±±±±±±+
    在网关可以用下面的命令看看网络中谁在使用traceroute
    tcpdump -i eth1 ‘ip[8] < 5’

    4.6、抓大于X字节的包

    大于600字节
    tcpdump -i eth1 ‘ip[2:2] > 600’

    4.7、更多的IP过滤

    首先还是需要知道TCP基本结构,再次推荐《TCP/IP详解》,卷一就够看的了,避免走火入魔。

    TCP头
    0 1 2 3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
    | Source Port | Destination Port |
    ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
    | Sequence Number |
    ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
    | Acknowledgment Number |
    ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
    | Data | |C|E|U|A|P|R|S|F| |
    | Offset| Res. |W|C|R|C|S|S|Y|I| Window |
    | | |R|E|G|K|H|T|N|N| |
    ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
    | Checksum | Urgent Pointer |
    ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
    | Options | Padding |
    ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
    | data |
    ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
    抓取源端口大于1024的TCP数据包
    tcpdump -i eth1 ‘tcp[0:2] > 1024’
    匹配TCP数据包的特殊标记
    TCP标记定义在TCP头的第十四个字节

    ±±±±±±±±+
    |C|E|U|A|P|R|S|F|
    |W|C|R|C|S|S|Y|I|
    |R|E|G|K|H|T|N|N|
    ±±±±±±±±+
    重复一下TCP三次握手,两个主机是如何勾搭的:

    源发送SYN
    目标回答SYN, ACK
    源发送ACK
    没女朋友的童鞋要学习一下:

    1. MM,你的手有空吗?–
    2. 有空,你呢?~~
    3. 我也有空 _

    失败的loser是酱紫的:

    1. MM,这是你掉的板砖吗?(SYN)  ̄▽ ̄
    2. 不是,找拍啊?(RST-ACK) ˋ﹏ˊ

    只抓SYN包,第十四字节是二进制的00000010,也就是十进制的2
    tcpdump -i eth1 ‘tcp[13] = 2’
    抓SYN, ACK (00010010 or 18)
    tcpdump -i eth1 ‘tcp[13] = 18’
    抓SYN或者SYN-ACK
    tcpdump -i eth1 ‘tcp[13] & 2 = 2’
    用到了位操作,就是不管ACK位是啥。

    抓PSH-ACK
    tcpdump -i eth1 ‘tcp[13] = 24’
    抓所有包含FIN标记的包(FIN通常和ACK一起,表示幽会完了,回见)
    tcpdump -i eth1 ‘tcp[13] & 1 = 1’
    抓RST(勾搭没成功,伟大的greatwall对她认为有敏感信息的连接发RST包,典型的棒打鸳鸯)
    tcpdump -i eth1 ‘tcp[13] & 4 = 4’
    下图详细描述了TCP各种状态的标记,方便分析。

    tcp_state_machine.jpg

    4.8、大叔注

    tcpdump考虑了一些数字恐惧症者的需求,提供了部分常用的字段偏移名字:

    icmptype (ICMP类型字段)
    icmpcode (ICMP符号字段)
    tcpflags (TCP标记字段)

    ICMP类型值有:
    icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply

    TCP标记值:
    tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, tcp-urg
    这样上面按照TCP标记位抓包的就可以写直观的表达式了:

    只抓SYN包
    tcpdump -i eth1 ‘tcp[tcpflags] = tcp-syn’
    抓SYN, ACK
    tcpdump -i eth1 ‘tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0’

    4.9、抓SMTP数据

    tcpdump -i eth1 ‘((port 25) and (tcp[(tcp[12]>>2):4] = 0x4d41494c))’
    抓取数据区开始为"MAIL"的包,"MAIL"的十六进制为0x4d41494c。

    4.10、抓HTTP GET数据

    tcpdump -i eth1 ‘tcp[(tcp[12]>>2):4] = 0x47455420’
    "GET "的十六进制是47455420

    4.11、抓SSH返回

    tcpdump -i eth1 ‘tcp[(tcp[12]>>2):4] = 0x5353482D’
    "SSH-"的十六进制是0x5353482D

    tcpdump -i eth1 ‘(tcp[(tcp[12]>>2):4] = 0x5353482D) and (tcp[((tcp[12]>>2)+4):2] = 0x312E)’
    抓老版本的SSH返回信息,如"SSH-1.99…"

    三、大叔注
    如果是为了查看数据内容,建议用tcpdump -s 0 -w filename把数据包都保存下来,然后用wireshark的Follow TCP Stream/Follow UDP Stream来查看整个会话的内容。

    -s 0是抓取完整数据包,否则默认只抓68字节。
    另外,用tcpflow也可以方便的获取TCP会话内容,支持tcpdump的各种表达式。

    3.1、UDP头
    0 7 8 15 16 23 24 31
    ±-------±-------±-------±-------+
    | Source | Destination |
    | Port | Port |
    ±-------±-------±-------±-------+
    | | |
    | Length | Checksum |
    ±-------±-------±-------±-------+
    | |
    | DATA … |
    ±----------------------------------+
    抓DNS请求数据
    tcpdump -i eth1 udp dst port 53
    3.2、其他
    -c参数对于运维人员来说也比较常用,因为流量比较大的服务器,靠人工CTRL+C还是抓的太多,甚至导致服务器宕机,于是可以用-c参数指定抓多少个包。

    time tcpdump -nn -i eth0 ‘tcp[tcpflags] = tcp-syn’ -c 10000 > /dev/null
    上面的命令计算抓10000个SYN包花费多少时间,可以判断访问量大概是多少。

    使用案例

    下面介绍一些tcpdump中过滤语句比较高级的用法
    想获取172.16.10.11和google.com之间建立TCP三次握手中带有SYN标记位的网络包.

    命令为:sudo tcpdump -i eth0 ‘host 172.16.0.11 andhost google.com and tcp[tcpflags]&tcp-syn!=0’ -c 3 -nn
    在这里插入图片描述
    上面的命令是不是看着有点晕的感觉。 是的。
    下面详细介相关知识。
    其实我们理解这种语法: proto [ expr : size] ,就不难理解上面的语句了。
    下面详细介绍proto [ expr : size]
    Proto即protocol的缩写,它表示这里要指定的是某种协议名称,如ip,tcp,udp等。总之可以指定的协议有十多种,如链路层协议 ether,fddi,tr,wlan,ppp,slip,link,
    网络层协议ip,ip6,arp,rarp,icmp传输层协议tcp,udp等。
    expr用来指定数据报字节单位的偏移量,该偏移量相对于指定的协议层,默认的起始位置是0;而size表示从偏移量的位置开始提取多少个字节,可以设置为1、2、4,默认为1字节。如果只设置了expr,而没有设置size,则默认提取1个字节。比如ip[2:2],就表示提取出第3、4个字节;而ip[0]则表示提取ip协议头的第一个字节。在我们提取了特定内容之后,我们就需要设置我们的过滤条件了,我们可用的“比较操作符”包括:>,<,>=,<=,=,!=,总共有6个。

    举例:想截取每个TCP会话的起始和结束报文(SYN 和 FIN 报文), 而且会话方中有一个远程主机.
    sudo tcpdump ‘tcp[13] & 3 != 0 and not(src and dst net 172.16.0.0)’ -nn
    如果熟悉tcp首部报文格式可以比较容易理解这句话,因为tcp便宜13字节的位置为2位保留位和6位标志位(URG,ACK,PSH,RST,SYN,FIN), 所以与3相与就可以得出SYN,FIN其中是否一个置位1.

    从上面可以看到在写过滤表达式时,需要我们对协议格式比较理解才能把表达式写对。这个比较有难度的…。为了让tcpdump工具更人性化一些,有一些常用的偏移量,可以通过一些名称来代替,比如icmptype表示ICMP协议的类型域、icmpcode表示ICMP的code域,tcpflags 则表示TCP协议的标志字段域。更进一步的,对于ICMP的类型域,可以用这些名称具体指代:icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect,icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob,icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq,icmp-maskreply。

    而对于TCP协议的标志字段域,则可以细分为tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg。
    对于tcpdump 只能通过经常操作来熟练这些语句了。也可以把网络包用tcpdump截获保存到指定文件,然后用wireshark等可视化软件分析网络包。

    参考链接

    https://blog.csdn.net/hzhsan/article/details/43445787
    https://blog.csdn.net/wzx19840423/article/details/50836761

    展开全文
  • 协同过滤中的相似度计算三种方法

    千次阅读 2019-09-10 16:38:01
    在python中用函数corrcoef实现,具体方法见参考资料 (3)余弦相似度 通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1...
    • 欧氏距离法

    就是计算每两个点的距离,比如Nike和Sony的相似度  。

    数值越小,表示相似度越高。

    def OsDistance(vector1, vector2): 

      sqDiffVector = vector1-vector2 

      sqDiffVector=sqDiffVector**2 

      sqDistances = sqDiffVector.sum() 

      distance = sqDistances**0.5 

      return distance

     

    • 皮尔逊相关系数 

    两个变量之间的相关系数越高,从一个变量去预测另一个变量的精确度就越高,这是因为相关系数越高,就意味着这两个变量的共变部分越多,所以从其中一个变量的变化就可越多地获知另一个变量的变化。如果两个变量之间的相关系数为1或-1,那么你完全可由变量X去获知变量Y的值。

    ·         当相关系数为0时,X和Y两变量无关系。

    ·         当X的值增大,Y也增大,正相关关系,相关系数在0.00与1.00之间

    ·         当X的值减小,Y也减小,正相关关系,相关系数在0.00与1.00之间

    ·         当X的值增大,Y减小,负相关关系,相关系数在-1.00与0.00之间

              当X的值减小,Y增大,负相关关系,相关系数在-1.00与0.00之间

    相关系数的绝对值越大,相关性越强,相关系数越接近于1和-1,相关度越强,相关系数越接近于0,相关度越弱。

    在python中用函数corrcoef实现,具体方法见参考资料

    (3)余弦相似度

    通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相

    反的方向时,余弦相似度的值为-1。在比较过程中,向量的规模大小不予考虑,仅仅考虑到向量的指向方向。余弦相似度通常用于两个向量的夹角小于90°之内,因此余弦相似度的值为0到1之间。

           

    展开全文
  • 简单介绍AngularJS过滤器filter用法,每个都将列出用法代码以便加深了解; 内置过滤器: currency(货币)、date(日期)、filter(子串匹配)、json(格式化json对象)、limitTo(限制个数)、lowercase(小写)、...
  • 1:过滤器 * 过滤器不是目标资源,它是在去目标资源前后的过程中执行的(也就是双向的过程),另外,过滤器通常是过滤访问路径,只要你访问的资源中包含了我要过滤的路径,我就对你进行过滤,并且它的功能很强大,...
  • Javascript常用的数组方法

    千次阅读 多人点赞 2021-04-04 17:22:24
    数组的几种常用方法 1、splice:可对数组进行增、删、改的操作; 2、push:给数组的末尾添加一个或多个元素; 3、pop:将数组最后一个元素删除掉; 4、unshift:给数组的开头添加元素; 5、shift:将数组的第...
  • 1、三种事实表概述 2、三种事实表对比 3、事实表设计 8 大原则 4、事实表设计方法 第一步:选择业务过程及确定事实表类型 第二步:声明粒度 第步:确定维度 第四步:确定事实
  • 特征选择的三种方法

    千次阅读 2020-11-19 03:51:02
    过滤方法(filter method)使用代理度量而不是错误率为特征子集评分。常用的度量包括互信息和相关系数。许多过滤器提供特征的排名,而不是一个明确的最佳特征子集。 • 嵌入方法(embedd method)将特征选择作为...
  • Pandas提供了多种API函数用于支持多种类型数据(如CSV、Excel、SQL等)的读写,其中常用的函数如下表所示。 文件类型 读取函数 写入函数 xls/xlsx read_excel to_excel CSV read_csv to_csv SQL read_...
  • Python实现敏感词过滤的4种方法

    千次阅读 2020-12-15 14:42:39
    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽...(我已经尽量把脏话做成图片的形式了,要不然文章发不出去)方法一:replace过滤replace就是最简单的字符串替换,当一串字符串中有可能...
  • 协同过滤(collaborative filtering)是推荐系统常用的一种方法。cf的主要思想就是找出物品相似度高的归为一类进行推荐。cf又分为icf和ucf。icf指的是item collaborative filtering,是将商品进行分析推荐。同理ucf...
  • 创建一个Filter:过滤器就是一个普通的类,它需要实现javax.servlet.Filter接口 package cn.itsource._01_filterchain; import java.io.IOException; import javax.servlet.Filter; import javax.servlet....
  • web前端开发常见的安全问题就是会遭遇...这是最常见的一,主要入口为表单项(一般就是正则过滤不周全)、内联样式表(exploer) 正则过滤的解决办法,php一般会使用htmlspecialchars或者htmlentities函数进行
  • python-相似度计算的三种常用方法

    万次阅读 2018-06-01 10:09:22
    协同过滤就是通过将用户和其他用户的数据进行对比来实现推荐的。(1)相似度计算:用欧氏距离来计算。相似度用距离来衡量,距离越大,相似度越小;距离越小,相似度越大。(2)皮尔逊相关系数:这个参数用来度量两个...
  • js中数组常用方法总结,包括ES6

    万次阅读 多人点赞 2018-10-13 11:17:47
    push()方法可以向数组后添加一个新的元素,并返回新数组的长度。 末尾添加,返回长度,改变原数组 var a = [1,2,3] var b = a.push(4) console.log(a) // [1,2,3,4] console.log(b) // 4 2.unshift() 前增 ...
  • ML之FE:数据处理—特征工程之特征选择常用方法之基于搜索策略的三种分类、基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现 目录 Wrapper包裹式/封装式——基于搜索策略的类 T1、全局...
  • js数组常用方法

    万次阅读 多人点赞 2018-12-26 15:04:25
    数组转字符串,方法只接收一个参数:即默认为逗号分隔符()。 &lt;script&gt; var arr=[1,2,3,4]; console.log(arr.join()); //1,2,3,4 console.log(arr.join(":")); //1:2:3:4 console....
  • 推荐系统的几种常用算法总结

    万次阅读 多人点赞 2019-09-25 08:24:27
    另一类是基于物品的协同过滤算法,除此之外,基于内容的推荐算法应用也非常广泛等等,因此下文将对涉及推荐系统的常用算法进行详细介绍。 1、基于流行度的推荐算法 2、基于协同过滤的推荐算法(UserCF与ItemCF...
  • 采用vue的过滤机制就可以解决这种情况,有两方式: 第一:全局写法,在main.js里面加入 // 【全局过滤】---------------------------------------- //转换情况一的日期 Vue.filter('yyyy-MM-dd', v =>.
  • Qt事件与常用事件处理、过滤

    千次阅读 2018-04-25 08:32:15
    转 https://blog.csdn.net/Apollon_krj/article/details/72759366 ...QPushbutton::clicked QPushbutton::realsead QPushbutton::pressed 而信号与槽的处理属于事件的一,产生一个信号可以认为是一个信号事件...
  • 种常用信号平滑去噪的方法(附Matlab代码)

    万次阅读 多人点赞 2020-07-31 20:44:36
    种常用信号平滑去噪的方法(附Matlab代码)1 滑动平均法1.0 移动平均法的方法原理1.1 matlab内自带函数实现移动平均法1.2 利用卷积函数conv()实现移动平均法1.3 利用filter滤波函数实现移动平均法1.4 移动平均的...
  • 数组的常用方法大全

    千次阅读 多人点赞 2019-04-15 21:43:03
    数组的方法 1. join (原数组不受影响) ​ 该方法可以将数组里的元素,通过指定的分隔符,以字符串的形式连接起来。 返回值:返回一个新的字符串 //将数组用 - 符号连接起来 let arr = [1,2,3,4,5]; let str = arr.join...
  • 这是最简单的一插值算法,当图片放大时,缺少的像素通过直接使用与之最近原有颜色生成,也就是说照搬旁边的像素这样做结果产生了明显可见的锯齿。在待求象素的四邻象素中,将距离待求象素最近的邻灰度赋给待求象素...
  • 常用的数据预处理方法

    千次阅读 2019-05-12 14:05:50
    官方文档为过滤缺失数据,how中any表示带缺失值的所有行,'all’指清除全是缺失值的行;thresh,int,保留含有int个非空值的行;subset对特定的列进行缺失值删除处理;axis、inplace与drop函数一致 二、填充数据 ...
  • 编者按:之前推出了《推荐系统系列教程》,反响不错,前面已经推出了九期,今天按约推出第十期:协同过滤中的相似度计量方法有哪些?希望朋友们多点“在看”,多多转发,我会在...
  • jQuery常用方法汇总

    万次阅读 多人点赞 2018-04-06 15:57:33
    常用方法索引:1.JQuery自执行函数(三种)2.text() html() val()3.css()4.get() 非ajax用法5.parent() children() parents() find()6.eq() siblings() index()7.height() width()8.addClass() remov...
  • 大数据从入门到实战 - HBase高级特性:过滤器(二) 一、关于此次实践 1、实战简介 2、全部任务 二、实践详解 1、第1关:常用的专用过滤器 2、第2关:同时使用多种过滤器 3、第3关:过滤器总结

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 233,438
精华内容 93,375
关键字:

常用的三种过滤方法