Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
scapy
Manage
Activity
Members
Plan
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CodeLinaro
public-release-test-restored
platform
external
scapy
Commits
11bad965
Commit
11bad965
authored
8 years ago
by
gpotter2
Committed by
Pierre Lalet
8 years ago
Browse files
Options
Downloads
Patches
Plain Diff
[External/Windows] Fixed win_find_exe (#503)
parent
2a54fe68
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
scapy/arch/windows/__init__.py
+67
-20
67 additions, 20 deletions
scapy/arch/windows/__init__.py
with
67 additions
and
20 deletions
scapy/arch/windows/__init__.py
+
67
−
20
View file @
11bad965
...
...
@@ -138,27 +138,67 @@ def exec_query(cmd, fields):
return
_exec_query_vbs
(
cmd
,
fields
)
return
_exec_query_ps
(
cmd
,
fields
)
DEEP_LOOKUP_CACHE
=
{}
def
_deep_lookup
(
prog_list
,
max_depth
=
3
):
"""
Quickly iterate through Program Files to find the programs
"""
results
=
{}
def
env_path
(
key
):
try
:
return
os
.
environ
[
key
]
except
KeyError
:
return
""
def
has_common_item
(
l1
,
l2
):
for
i
in
l1
:
if
i
in
l2
:
return
True
,
i
,
i
if
i
+
"
.exe
"
in
l2
:
return
True
,
i
+
"
.exe
"
,
i
return
False
,
None
,
None
def
key_in_path
(
path
,
key
):
return
key
.
lower
()
in
path
.
lower
()
deeper_paths
=
[
env_path
(
"
ProgramFiles
"
),
env_path
(
"
ProgramFiles(x86)
"
)]
for
path
in
deeper_paths
:
len_p
=
len
(
path
)
+
len
(
os
.
path
.
sep
)
for
root
,
subFolders
,
files
in
os
.
walk
(
path
):
depth
=
root
[
len_p
:].
count
(
os
.
path
.
sep
)
if
depth
>
max_depth
:
del
subFolders
[:]
continue
ye
,
name
,
key
=
has_common_item
(
prog_list
,
files
)
if
ye
:
_k_path
=
os
.
path
.
normpath
(
os
.
path
.
join
(
root
,
name
))
if
key_in_path
(
_k_path
,
prog_list
[
key
]):
results
[
name
]
=
_k_path
global
DEEP_LOOKUP_CACHE
DEEP_LOOKUP_CACHE
=
results
def
_where
(
filename
,
dirs
=
None
,
env
=
"
PATH
"
):
"""
Find file in current dir
or
system path
"""
"""
Find file in current dir
, in deep_lookup cache or in
system path
"""
if
dirs
is
None
:
dirs
=
[]
if
not
isinstance
(
dirs
,
list
):
dirs
=
[
dirs
]
if
glob
(
filename
):
return
filename
global
DEEP_LOOKUP_CACHE
if
filename
in
DEEP_LOOKUP_CACHE
:
return
DEEP_LOOKUP_CACHE
[
filename
]
paths
=
[
os
.
curdir
]
+
os
.
environ
[
env
].
split
(
os
.
path
.
pathsep
)
+
dirs
for
path
in
paths
:
for
match
in
glob
(
os
.
path
.
join
(
path
,
filename
)):
if
match
:
return
os
.
path
.
normpath
(
match
)
p_match
=
os
.
path
.
normpath
(
match
)
if
os
.
path
.
isfile
(
p_match
):
return
p_match
raise
IOError
(
"
File not found: %s
"
%
filename
)
def
win_find_exe
(
filename
,
installsubdir
=
None
,
env
=
"
ProgramFiles
"
):
"""
Find executable in current dir, system path or given ProgramFiles subdir
"""
if
not
WINDOWS
:
return
for
fn
in
[
filename
,
filename
+
"
.exe
"
]:
fns
=
[
filename
]
if
filename
.
endswith
(
"
.exe
"
)
else
[
filename
+
"
.exe
"
,
filename
]
for
fn
in
fns
:
try
:
if
installsubdir
is
None
:
path
=
_where
(
fn
)
...
...
@@ -182,24 +222,31 @@ def is_new_release():
return
False
class
WinProgPath
(
ConfClass
):
# This is a dict containing the name of the .exe and a keyword
# that must be in the path of the file
external_prog_list
=
{
"
AcroRd32
"
:
""
,
"
gsview32
"
:
""
,
"
dot
"
:
"
graph
"
,
"
windump
"
:
""
,
"
tshark
"
:
""
,
"
tcpreplay
"
:
""
,
"
hexer
"
:
""
,
"
sox
"
:
""
,
"
wireshark
"
:
""
}
_default
=
"
<System default>
"
# We try some magic to find the appropriate executables
pdfreader
=
win_find_exe
(
"
AcroRd32
"
)
psreader
=
win_find_exe
(
"
gsview32.exe
"
,
"
Ghostgum/gsview
"
)
dot
=
win_find_exe
(
"
dot
"
,
"
ATT/Graphviz/bin
"
)
tcpdump
=
win_find_exe
(
"
windump
"
)
tshark
=
win_find_exe
(
"
tshark
"
)
tcpreplay
=
win_find_exe
(
"
tcpreplay
"
)
display
=
_default
hexedit
=
win_find_exe
(
"
hexer
"
)
wireshark
=
win_find_exe
(
"
wireshark
"
,
"
wireshark
"
)
powershell
=
win_find_exe
(
"
powershell
"
,
installsubdir
=
"
System32
\\
WindowsPowerShell
\\
v1.0
"
,
env
=
"
SystemRoot
"
)
cscript
=
win_find_exe
(
"
cscript
"
,
installsubdir
=
"
System32
"
,
env
=
"
SystemRoot
"
)
def
__init__
(
self
):
_deep_lookup
(
self
.
external_prog_list
)
# We try some magic to find the appropriate executables
self
.
pdfreader
=
win_find_exe
(
"
AcroRd32
"
)
self
.
psreader
=
win_find_exe
(
"
gsview32
"
)
self
.
dot
=
win_find_exe
(
"
dot
"
)
self
.
tcpdump
=
win_find_exe
(
"
windump
"
)
self
.
tshark
=
win_find_exe
(
"
tshark
"
)
self
.
tcpreplay
=
win_find_exe
(
"
tcpreplay
"
)
self
.
display
=
self
.
_default
self
.
hexedit
=
win_find_exe
(
"
hexer
"
)
self
.
sox
=
win_find_exe
(
"
sox
"
)
self
.
wireshark
=
win_find_exe
(
"
wireshark
"
,
"
wireshark
"
)
self
.
powershell
=
win_find_exe
(
"
powershell
"
,
installsubdir
=
"
System32
\\
WindowsPowerShell
\\
v1.0
"
,
env
=
"
SystemRoot
"
)
self
.
cscript
=
win_find_exe
(
"
cscript
"
,
installsubdir
=
"
System32
"
,
env
=
"
SystemRoot
"
)
conf
.
prog
=
WinProgPath
()
if
conf
.
prog
.
powershell
==
"
powershell
"
:
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment