Если вы можете запустить python в своей оболочке, можно также использовать следующий (до смешного длинный) однострочник:
python -c 'import os;import sys;output = lambda(x) : sys.stdout.write(x + "\n"); paths = os.environ["PATH"].split(":") ; listdir = lambda(p) : os.listdir(p) if os.path.isdir(p) else [ ] ; isfile = lambda(x) : True if os.path.isfile(os.path.join(x[0],x[1])) else False ; isexe = lambda(x) : True if os.access(os.path.join(x[0],x[1]), os.X_OK) else False ; map(output,[ os.path.join(p,f) for p in paths for f in listdir(p) if isfile((p,f)) and isexe((p,f)) ])'
Это было в основном забавным поупражняюсь для себя, чтобы увидеть, можно ли это сделать, используя одну строку кода Python, не прибегая к использованию функции exec. В более удобочитаемой форме и с некоторыми комментариями код выглядит так:
import os
import sys
# This is just to have a function to output something on the screen.
# I'm using python 2.7 in which 'print' is not a function and cannot
# be used in the 'map' function.
output = lambda(x) : sys.stdout.write(x + "\n")
# Get a list of the components in the PATH environment variable. Will
# abort the program is PATH doesn't exist
paths = os.environ["PATH"].split(":")
# os.listdir raises an error is something is not a path so I'm creating
# a small function that only executes it if 'p' is a directory
listdir = lambda(p) : os.listdir(p) if os.path.isdir(p) else [ ]
# Checks if the path specified by x[0] and x[1] is a file
isfile = lambda(x) : True if os.path.isfile(os.path.join(x[0],x[1])) else False
# Checks if the path specified by x[0] and x[1] has the executable flag set
isexe = lambda(x) : True if os.access(os.path.join(x[0],x[1]), os.X_OK) else False
# Here, I'm using a list comprehension to build a list of all executable files
# in the PATH, and abusing the map function to write every name in the resulting
# list to the screen.
map(output, [ os.path.join(p,f) for p in paths for f in listdir(p) if isfile((p,f)) and isexe((p,f)) ])
Что я сделал:
ssh -X VPNuser@server
firefox
Затем перейдите на веб-сайт для проверки утечки DNS -.
Если вы можете настроить обратный SSH-туннель на этом сервере, вы можете использовать удаленный веб-браузер с этими веб-страницами утечки DNS, чтобы хотя бы частично протестировать этот сервер. Вам также необходимо настроить прокси-сервер SOCKS 5 на этом сервере и настроить браузер для использования его на удаленном конце. Когда-то в пакете Perl был пример сценария, предоставляющего Socks, которого должно быть достаточно для этой задачи. Так что вам нужно это:
<--------------------------------------------------------->
Internet <--> Server Laptop etc
SSH reverse tunnel <--> SSH
Internet <--> Socks proxy <--> Web browser
Вы можете использовать wireshark в отдельной системе и самостоятельно управлять человеком посередине. После этого вы можете просмотреть журналы и посмотреть, появляются ли там какие-либо соответствующие утечки. Это было бы просто и должно быть довольно эффективно.
Другой вариант — использовать ведение журнала iptables, что-то вроде
iptables -A OUTPUT -d 1.1.1.1/32 -j accept
iptables -A OUTPUT -j LOG