本文整理汇总了Python中pysap.SAPNI.SAPNIStreamSocket类的典型用法代码示例。如果您正苦于以下问题:Python SAPNIStreamSocket类的具体用法?Python SAPNIStreamSocket怎么用?Python SAPNIStreamSocket使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SAPNIStreamSocket类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: recv
def recv(self):
"""Receive a packet at the Enqueue layer, performing reassemble of
fragmented packets if necessary.
:return: received :class:`SAPEnqueue` packet
:rtype: :class:`SAPEnqueue`
:raise socket.error: if the connection was close
"""
# Receive the NI packet
packet = SAPNIStreamSocket.recv(self)
if SAPEnqueue in packet and packet[SAPEnqueue].more_frags:
log_sapenqueue.debug("Received Enqueue fragmented packet")
head = str(packet[SAPEnqueue])[:20]
data = str(packet[SAPEnqueue])[20:]
total_length = packet[SAPEnqueue].len - 20
recvd_length = len(packet[SAPEnqueue]) - 20
log_sapenqueue.debug("Received %d up to %d bytes", recvd_length, total_length)
while recvd_length < total_length and packet[SAPEnqueue].more_frags == 1:
response = SAPNIStreamSocket.recv(self)[SAPEnqueue]
data += str(response)[20:]
recvd_length += len(response) - 20
log_sapenqueue.debug("Received %d up to %d bytes", recvd_length, total_length)
packet = SAPEnqueue(head + data)
return packet
示例2: main
def main():
options = parse_options()
if options.verbose:
logging.basicConfig(level=logging.DEBUG)
# Initiate the connection
conn = SAPNIStreamSocket.get_nisocket(options.remote_host, options.remote_port)
print "[*] Connected to the message server %s:%d" % (options.remote_host, options.remote_port)
client_string = options.client
# Send MS_LOGIN_2 packet
p = SAPMS(flag=0x00, iflag=0x08, toname=client_string, fromname=client_string)
print "[*] Sending login packet"
response = conn.sr(p)[SAPMS]
print "[*] Login performed, server string: %s" % response.fromname
print "[*] Listening to server messages"
try:
while (True):
# Send MS_SERVER_LST packet
response = conn.recv()[SAPMS]
print "[*] Message received !"
response.show()
except SocketError:
print "[*] Connection error"
except KeyboardInterrupt:
print "[*] Cancelled by the user"
示例3: main
def main():
options = parse_options()
if options.verbose:
logging.basicConfig(level=logging.DEBUG)
print("[*] Connecting to SAP Router %s:%d (talk mode %s)" % (options.remote_host,
options.remote_port,
options.talk_mode))
# Retrieve the router version used by the server if not specified
if options.router_version is None:
conn = SAPNIStreamSocket.get_nisocket(options.remote_host,
options.remote_port,
keep_alive=False)
options.router_version = get_router_version(conn)
conn.close()
print("[*] Using SAP Router version %d" % options.router_version)
options.talk_mode = {"raw": 1,
"ni": 0}[options.talk_mode]
results = []
for (host, port) in parse_target_hosts(options.target_hosts, options.target_ports):
status = route_test(options.remote_host, options.remote_port, host, port,
options.talk_mode, options.router_version)
if options.verbose:
print("[*] Status of %s:%s: %s" % (host, port, status))
if status == "open":
results.append((host, port))
print("[*] Host/Ports found open:")
for (host, port) in results:
print("\tHost: %s\tPort:%s" % (host, port))
示例4: do_connect
def do_connect(self, args):
""" Initiate the connection to the Message Server service. The
connection is registered using the client_string runtime option. """
# Create the socket connection
try:
self.connection = SAPNIStreamSocket.get_nisocket(self.options.remote_host, self.options.remote_port)
except SocketError as e:
self._error("Error connecting with the Message Server")
self._error(str(e))
return
self._print("Attached to %s / %d" % (self.options.remote_host, self.options.remote_port))
# Send MS_LOGIN_2 packet
p = SAPMS(flag=0x00, iflag=0x08, toname=self.runtimeoptions["client_string"], fromname=self.runtimeoptions["client_string"])
self._debug("Sending login packet")
response = self.connection.sr(p)[SAPMS]
if response.errorno == 0:
self.runtimeoptions["server_string"] = response.fromname
self._debug("Login performed, server string: %s" % response.fromname)
self._print("pysap's Message Server monitor, connected to %s / %d" % (self.options.remote_host, self.options.remote_port))
self.connected = True
else:
if response.errorno in ms_errorno_values:
self._error("Error performing login: %s" % ms_errorno_values[response.errorno])
else:
self._error("Unknown error performing login: %d" % response.errorno)
示例5: main
def main():
options = parse_options()
if options.verbose:
logging.basicConfig(level=logging.DEBUG)
# Initiate the connection
conn = SAPNIStreamSocket.get_nisocket(options.remote_host, options.remote_port)
print "[*] Connected to the message server %s:%d" % (options.remote_host, options.remote_port)
client_string = options.client
# Send MS_LOGIN_2 packet
p = SAPMS(flag=0x00, iflag=0x08, toname=client_string, fromname=client_string)
print "[*] Sending login packet"
response = conn.sr(p)[SAPMS]
print "[*] Login performed, server string: %s" % response.fromname
# Sends a message to another client
p = SAPMS(flag=0x02, iflag=0x01, toname=options.target, fromname=client_string, opcode=1)
p /= Raw(options.message)
print "[*] Sending packet to: %s" % options.target
conn.send(p)
示例6: route_test
def route_test(rhost, rport, thost, tport):
print "[*] Routing connections to %s:%s" % (thost, tport)
# Initiate the connection. We don't want the NI Stream Socket to handle
# keep-alive messages, as the response to connect requests are NI_PONG
conn = SAPNIStreamSocket.get_nisocket(rhost, rport, keep_alive=False)
router_string = [SAPRouterRouteHop(hostname=rhost,
port=rport),
SAPRouterRouteHop(hostname=thost,
port=tport)]
router_string_lens = map(len, map(str, router_string))
p = SAPRouter(type=SAPRouter.SAPROUTER_ROUTE,
route_entries=len(router_string),
route_talk_mode=1,
route_rest_nodes=1,
route_length=sum(router_string_lens),
route_offset=router_string_lens[0],
route_string=router_string,
)
response = conn.sr(p)
if router_is_error(response):
status = 'error'
elif router_is_pong(response):
status = 'open'
conn.close()
return status
示例7: main
def main():
options = parse_options()
if options.verbose:
logging.basicConfig(level=logging.DEBUG)
# Initiate the connection
conn = SAPNIStreamSocket.get_nisocket(options.remote_host, options.remote_port)
print "[*] Connected to the SAP Router %s:%d" % (options.remote_host, options.remote_port)
# Retrieve the router version used by the server if not specified
if options.router_version is None:
options.router_version = get_router_version(conn)
print "[*] Using SAP Router version %d" % options.router_version
print "[*] Checking if the server is vulnerable to a timing attack (CVE-2014-0984) ..."
with open(options.output, "w") as f:
c = 0
for i in range(0, len(options.password) + 1):
password = options.password[:i] + "X" * (len(options.password) - i)
print "[*] Trying with password (%s) len %d" % (password, len(password))
for _ in range(0, options.tries):
try_password(options, password, f, c)
c += 1
示例8: route
def route(self):
"""Requests a route to forward the traffic through the remote SAP
Router.
@raise SAPRouteException: if the route request is denied
@raise Exception: if an error occurred when requesting the route
"""
log_saprouter.debug("Routing to %s:%d" % (self.target_address,
self.target_port))
# Creates the connection with the SAP Router
(remote_address, remote_port) = self.remote_host
router = SAPNIStreamSocket.get_nisocket(remote_address, remote_port,
keep_alive=self.keep_alive)
# Build the Route request packet
router_string = [SAPRouterRouteHop(hostname=remote_address,
port=remote_port),
SAPRouterRouteHop(hostname=self.target_address,
port=self.target_port,
password=self.target_pass)]
router_string_lens = list(map(len, list(map(str, router_string))))
p = SAPRouter(type=SAPRouter.SAPROUTER_ROUTE,
route_entries=len(router_string),
route_talk_mode=self.talk_mode,
route_rest_nodes=1,
route_length=sum(router_string_lens),
route_offset=router_string_lens[0],
route_string=router_string)
# Send the request and grab the response
response = router.sr(p)
if SAPRouter in response:
response = response[SAPRouter]
if router_is_pong(response):
log_saprouter.debug("Route request to %s:%d accepted by %s:%d" %
(self.target_address, self.target_port,
remote_address, remote_port))
self.routed = True
elif router_is_error(response) and response.return_code == -94:
log_saprouter.debug("Route request to %s:%d not accepted by %s:%d" %
(self.target_address, self.target_port,
remote_address, remote_port))
raise SAPRouteException("Route request not accepted")
else:
log_saprouter.error("Router send error: %s" % response.err_text_value)
raise Exception("Router error: %s", response.err_text_value)
else:
log_saprouter.error("Wrong response received")
raise Exception("Wrong response received")
return router
示例9: test_sapnistreamsocket_close
def test_sapnistreamsocket_close(self):
"""Test SAPNIStreamSocket with a server that closes the connection"""
self.start_server(SAPNITestHandlerClose)
sock = socket.socket()
sock.connect((self.test_address, self.test_port))
self.client = SAPNIStreamSocket(sock, keep_alive=False)
with self.assertRaises(socket.error):
self.client.sr(self.test_string)
self.stop_server()
示例10: test_sapnistreamsocket_getnisocket
def test_sapnistreamsocket_getnisocket(self):
"""Test SAPNIStreamSocket get nisocket class method"""
self.start_server(SAPNITestHandler)
self.client = SAPNIStreamSocket.get_nisocket(self.test_address,
self.test_port)
packet = self.client.sr(self.test_string)
packet.decode_payload_as(Raw)
self.client.close()
self.assertIn(SAPNI, packet)
self.assertEqual(packet[SAPNI].length, len(self.test_string))
self.assertEqual(packet.payload.load, self.test_string)
self.stop_server()
示例11: send
def send(self, packet):
"""Send a packet. If the talk mode in use is native the packet sent is
a raw packet. Otherwise, the packet is a NI layer packet in the same way
the :class:`SAPNIStreamSocket` works.
:param packet: packet to send
:type packet: Packet
"""
# If we're working on native mode and the route was accepted, we don't
# need the NI layer anymore. Just use the plain socket inside the
# NIStreamSockets.
if self.routed and self.talk_mode == 1:
return StreamSocket.send(self, packet)
# If the route was not accepted yet or we're working on non-native talk
# mode, we need the NI layer.
return SAPNIStreamSocket.send(self, packet)
示例12: test_sapnistreamsocket_without_keep_alive
def test_sapnistreamsocket_without_keep_alive(self):
"""Test SAPNIStreamSocket without keep alive"""
self.start_server(SAPNITestHandlerKeepAlive)
sock = socket.socket()
sock.connect((self.test_address, self.test_port))
self.client = SAPNIStreamSocket(sock, keep_alive=False)
packet = self.client.sr(self.test_string)
packet.decode_payload_as(Raw)
self.client.close()
# We should receive a PING instead of our packet
self.assertIn(SAPNI, packet)
self.assertEqual(packet[SAPNI].length, len(SAPNI.SAPNI_PING))
self.assertEqual(packet.payload.load, SAPNI.SAPNI_PING)
self.stop_server()
示例13: test_sapnistreamsocket_with_keep_alive
def test_sapnistreamsocket_with_keep_alive(self):
"""Test SAPNIStreamSocket with keep alive"""
self.start_server(SAPNITestHandlerKeepAlive)
sock = socket.socket()
sock.connect((self.test_address, self.test_port))
self.client = SAPNIStreamSocket(sock, keep_alive=True)
packet = self.client.sr(self.test_string)
packet.decode_payload_as(Raw)
self.client.close()
# We should receive our packet, the PING should be handled by the
# stream socket
self.assertIn(SAPNI, packet)
self.assertEqual(packet[SAPNI].length, len(self.test_string))
self.assertEqual(packet.payload.load, self.test_string)
self.stop_server()
示例14: test_sapnistreamsocket_base_cls
def test_sapnistreamsocket_base_cls(self):
"""Test SAPNIStreamSocket handling of custom base packet classes"""
self.start_server(SAPNITestHandler)
class SomeClass(Packet):
fields_desc = [StrField("text", None)]
sock = socket.socket()
sock.connect((self.test_address, self.test_port))
self.client = SAPNIStreamSocket(sock, base_cls=SomeClass)
packet = self.client.sr(self.test_string)
self.client.close()
self.assertIn(SAPNI, packet)
self.assertIn(SomeClass, packet)
self.assertEqual(packet[SAPNI].length, len(self.test_string))
self.assertEqual(packet[SomeClass].text, self.test_string)
self.stop_server()
示例15: server_mode
def server_mode(options):
""""Implements the niping server running mode
:param options: option set from the command line
:type options: Values
"""
if not options.host:
options.host = "0.0.0.0"
sock = socket()
try:
sock.bind((options.host, options.port))
sock.listen(0)
print("")
print(datetime.today().ctime())
print("ready for connect from client ...")
while True:
sc, sockname = sock.accept()
client = SAPNIStreamSocket(sc)
print("")
print(datetime.today().ctime())
print("connect from host '{}', client hdl {} o.k.".format(sockname[0], client.fileno()))
try:
while True:
r = client.recv()
client.send(r.payload)
except SocketError:
pass
finally:
print("")
print(datetime.today().ctime())
print("client hdl {} disconnected ...".format(client.fileno()))
except SocketError:
print("[*] Connection error")
except KeyboardInterrupt:
print("[*] Cancelled by the user")
finally:
sock.shutdown(SHUT_RDWR)
sock.close()