Backdoor
기능이있는 gevent
을 사용하고 있습니다.Gevent 백도어 runing 코드 검사
이 내 코드의 단순화 된 버전입니다 :
run
방법에
entry_points
에서 만든
console_scripts
에라고
from gevent import backdoor, event
class App(object):
def __init__(self):
self.stop_event = event.Event()
self.servers = []
self.servers.append(backdoor.BackdoorServer((localhost, 6666))
# There is a tcp stream server using gevent configured too
def start(self):
for server in self.servers:
if not server.started:
server.start()
self.stop_event.wait()
for server in self.servers:
if server.started:
server.stop()
def run(*args, **kw):
app = App()
app.start()
내 setup.py
나는 app
변수를 검사하는 내 백도어를 사용하려면
로컬 내 run
기능.
백도어에 연결하고 inspect.stack()
명령을 실행하십시오. 이것이 내가 얻는 것입니다 :
[
(<frame object at 0x7fa49ea0b3a0>, '<console>', 1, '<module>', None, None),
(<frame object at 0x7fa49ce727f0>, '/usr/lib/python2.7/code.py', 103, 'runcode', [' exec code in self.locals\n'], 0),
(<frame object at 0x7fa49ce70250>, '/usr/lib/python2.7/code.py', 87, 'runsource', [' self.runcode(code)\n'], 0),
(<frame object at 0x7fa49ced7d38>, '/usr/lib/python2.7/code.py', 265, 'push', [' more = self.runsource(source, self.filename)\n'], 0),
(<frame object at 0x3569a40>, '/usr/lib/python2.7/code.py', 243, 'interact', [' more = self.push(line)\n'], 0),
(<frame object at 0x7fa49ced39b0>, 'path_to_project/venv/local/lib/python2.7/site-packages/gevent-1.0.2-py2.7-linux-x86_64.egg/gevent/backdoor.py', 75, '_run', [' console.interact(banner=self.banner)\n'], 0),
(<frame object at 0x7fa49ced3b90>, 'path_to_project/venv/local/lib/python2.7/site-packages/gevent-1.0.2-py2.7-linux-x86_64.egg/gevent/greenlet.py', 327, 'run', [' result = self._run(*self.args, **self.kwargs)\n'], 0)
]
위에서 보듯이 gevent는 스택을 다시 쓰고있는 것으로 보입니다. 프로그램을 시작하고있는 내 모듈의 run
함수가 포함되어 있지 않습니다. 백도어를 실행하는 greenlet의 run 메소드에서 멈 춥니 다.
실행중인 run
메서드를 검사하여 해당 변수를 검사하고 로컬 app
변수에 액세스 할 수있는 방법이 있습니까?