【tip】python pip&&scapy问题记录

2020/01/12 python scapy ARTS

python pip更新包

一次性更新所有需要更新的包,这条命令是stackoverflow上给出的(为啥pip自身不支持更新所有包呢?说是因为包依赖问题,pip不想背锅吧)

pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U

scapy问题1

我在Linux上安装的是Python 2.7.12, scapy 2.2.0-dev版本,我在win上安装的是Python 3.7.0, scapy 2.4.3版本,如下命令,在linux上正常,在win下报错了:

## linux
>>> ans, unans = sr(IP(dst=["yahoo.com","slashdot.org"])/TCP(dport=[22,80,443],flags="S"))
>>> ans.nsummary(lfilter = lambda (s,r): r.sprintf("%TCP.flags%") == "SA")
0000 IP / TCP 192.168.193.158:ftp_data > 98.137.246.8:https S ==> IP / TCP 98.137.246.8:https > 192.168.193.158:ftp_data SA / Padding
0001 IP / TCP 192.168.193.158:ftp_data > 216.105.38.15:https S ==> IP / TCP 216.105.38.15:https > 192.168.193.158:ftp_data SA / Padding
0002 IP / TCP 192.168.193.158:ftp_data > 216.105.38.15:http S ==> IP / TCP 216.105.38.15:http > 192.168.193.158:ftp_data SA / Padding
0003 IP / TCP 192.168.193.158:ftp_data > 98.137.246.8:http S ==> IP / TCP 98.137.246.8:http > 192.168.193.158:ftp_data SA / Padding
                
## win
>>> ans, unans = sr(IP(dst=["yahoo.com","slashdot.org"])/TCP(dport=[22,80,443],flags="S"))
>>> ans.nsummary(lfilter = lambda (s,r): r.sprintf("%TCP.flags%") == "SA")
  File "<ipython-input-105-eaf1a954d65e>", line 1                         
    ans.nsummary(lfilter = lambda (s,r): r.sprintf("%TCP.flags%") == "SA")
                                  ^                                       
SyntaxError: invalid syntax                                               
                                                                                                     >>>                                          

不知道是python的接口变了,还是scapy的接口变了,但我是按scapy官方教程敲的命令。看这个教程的print语法,明显是是2.x的。稍微看了下3.x的lambda,貌似是参数表是不带括号的。去带括号确实就不报错了。

scapy问题2

## win(Linux上貌似不支持traceroute函数,估计那个scapy版本还不支持)
>>> a = traceroute(["www.baidu.com", "www.secdev.org"], verbose=0)
>>> a.world_trace()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-111-e557f2028815> in <module>
----> 1 a.world_trace()

AttributeError: 'tuple' object has no attribute 'world_trace'
>>> a
(<Traceroute: TCP:22 UDP:0 ICMP:16 Other:0>,
 <Unanswered: TCP:22 UDP:0 ICMP:0 Other:0>)
>>>

解决方式如下(也是从这个回答上得到的启发):

# 我们要把调用形式改为即可:
>>> a[0].world_trace()

而且在win上要跑起traceroute_map(["www.google.co.uk", "www.secdev.org"])这个python命令,还需要安装cartopy模块,看上去一个很不好安装的模块,暂时放弃(可以看这个回答)。

Search

    Table of Contents