Pyreadline 无法与 scapy 一起正常工作

Pyreadline not working properly with scapy

我在 windows 环境中使用 scapy。但是我无法读取控制台上的输出。问题出在我导入 scapy 的特定文件中。如果我直接 运行 scapy 那么控制台上的输出是可读格式。

Welcome to Scapy (2.3.3)
Working
>>> packet = TCP()
>>> packet.show()
←[0m###[←[0m ←[31m←[1mTCP←[0m ←[0m]###←[0m
  ←[34msport←[0m←[0m=←[0m ←[35mftp_data←[0m
  ←[34mdport←[0m←[0m=←[0m ←[35mhttp←[0m
  ←[34mseq←[0m←[0m=←[0m ←[35m0←[0m
  ←[34mack←[0m←[0m=←[0m ←[35m0←[0m
  ←[34mdataofs←[0m←[0m=←[0m ←[35mNone←[0m
  ←[34mreserved←[0m←[0m=←[0m ←[35m0←[0m
  ←[34mflags←[0m←[0m=←[0m ←[35mS←[0m
  ←[34mwindow←[0m←[0m=←[0m ←[35m8192←[0m
  ←[34mchksum←[0m←[0m=←[0m ←[35mNone←[0m
  ←[34murgptr←[0m←[0m=←[0m ←[35m0←[0m
  ←[34moptions←[0m←[0m=←[0m ←[35m[]←[0m

>>>
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "C:\Python27\lib\atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "C:\Python27\lib\site-packages\scapy\main.py", line 244, in scapy_write_h
istory_file
    readline.write_history_file(conf.histfile)
  File "C:\Python27\lib\site-packages\pyreadline\rlmain.py", line 169, in write_
history_file
    self.mode._history.write_history_file(filename)
  File "C:\Python27\lib\site-packages\pyreadline\lineeditor\history.py", line 94
, in write_history_file
    fp.write(ensure_str(line.get_line_text()))
  File "C:\Python27\lib\site-packages\pyreadline\lineeditor\lineobj.py", line 25
6, in get_line_text
    buf = list(map(ensure_unicode, buf))
NameError: global name 'map' is not defined
Error in sys.exitfunc:
Traceback (most recent call last):
  File "C:\Python27\lib\atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "C:\Python27\lib\site-packages\scapy\main.py", line 244, in scapy_write_h
istory_file
    readline.write_history_file(conf.histfile)
  File "C:\Python27\lib\site-packages\pyreadline\rlmain.py", line 169, in write_
history_file
    self.mode._history.write_history_file(filename)
  File "C:\Python27\lib\site-packages\pyreadline\lineeditor\history.py", line 94
, in write_history_file
    fp.write(ensure_str(line.get_line_text()))
  File "C:\Python27\lib\site-packages\pyreadline\lineeditor\lineobj.py", line 25
6, in get_line_text
    buf = list(map(ensure_unicode, buf))
NameError: global name 'map' is not defined

通过安装软件包 'Colorama' 能够解决问题。这个问题已经在下面的thread中讨论过,也给出了答案。安装包后,我在脚本中添加了以下代码。

from colorama
init(convert=True)