Skip to content
Snippets Groups Projects
Commit f2eeaa01 authored by Yang Yuechun's avatar Yang Yuechun
Browse files

test server

parent 3743ba67
No related branches found
No related tags found
No related merge requests found
File added
File added
#!/usr/bin/env python
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
#print index instruction
f = open('index_instruction.txt', 'r')
file_contents = ''
file_contents += f.read()
print(file_contents)
f.close()
while 1:
# print('Enter index:')
text = ''
index = input()
while not index:
index = input(file_contents)
s.send(index.encode('utf-8'))
data = s.recv(BUFFER_SIZE).decode('utf-8')
text += data
while text.find('END') == -1:
data = s.recv(BUFFER_SIZE).decode('utf-8')
text += data
print(text[:-3])
if text[:-3] == 'close': break
s.close()
# print("received text:", text)
\ No newline at end of file
import json
import requests
from requests.auth import HTTPBasicAuth
#GNS3 Information
GNS3_SERVER_ADDR = '127.0.0.1'
GNS3_SERVER_PORT = '3080'
GNS3_USERNAME = 'admin'
GNS3_PASSWORD = 'cs436'
#URL mappings
#Copied and modified from https://gns3-server.readthedocs.io/en/latest/endpoints.html on December 17, 2018
GNS3_URLS = {
#Appliance
'appliances': 'v2/appliances',
'appliance_templates': 'v2/appliances/templates',
'initialize_node_from_template': 'v2/projects/{project_id}/appliances/{appliance_id}',
#TODO 'implement' later
#Compute
# /v2/computes
# /v2/computes/endpoint/{compute_id}/{emulator}/{action:.+}
# /v2/computes/{compute_id}
# /v2/computes/{compute_id}/auto_idlepc
# /v2/computes/{compute_id}/{emulator}/{action:.+}
# /v2/computes/{compute_id}/{emulator}/images
#Drawing
'drawings': 'v2/projects/{project_id}/drawings',
'drawing_instance': 'v2/projects/{project_id}/drawings/{drawing_id}',
#Gns3 vm
'vm_settings': 'v2/gns3vm',
'vm_engines_supported': 'v2/gns3vm/engines',
'engine_vms_supported': '/v2/gns3vm/engines/{engine}/vms',
#Link
'links': 'v2/projects/{project_id}/links',
'link_instance': 'v2/projects/{project_id}/links/{link_id}',
'link_filters': 'v2/projects/{project_id}/links/{link_id}/available_filters',
'link_pcap': 'v2/projects/{project_id}/links/{link_id}/pcap',
'link_start_capture': 'v2/projects/{project_id}/links/{link_id}/start_capture',
'link_stop_capture': 'v2/projects/{project_id}/links/{link_id}/stop_capture',
#Node
'nodes': 'v2/projects/{project_id}/nodes',
'node_instance': 'v2/projects/{project_id}/nodes/{node_id}',
'duplicate_node': 'v2/projects/{project_id}/nodes/{node_id}/duplicate',
'compute_node_idlepc': 'v2/projects/{project_id}/nodes/{node_id}/dynamips/auto_idlepc',
'compute_node_potential_idlepcs': 'v2/projects/{project_id}/nodes/{node_id}/dynamips/idlepc_proposals',
#'node_files': 'v2/projects/{project_id}/nodes/{node_id}/files/{path:.+}',
'node_links': 'v2/projects/{project_id}/nodes/{node_id}/links',
'reload_node': 'v2/projects/{project_id}/nodes/{node_id}/reload',
'start_node': 'v2/projects/{project_id}/nodes/{node_id}/start',
'stop_node': 'v2/projects/{project_id}/nodes/{node_id}/stop',
'suspend_node': 'v2/projects/{project_id}/nodes/{node_id}/suspend',
'reload_all_nodes': 'v2/projects/{project_id}/nodes/reload',
'start_all_nodes': 'v2/projects/{project_id}/nodes/start',
'stop_all_nodes': 'v2/projects/{project_id}/nodes/stop',
'suspend__all_nodes': 'v2/projects/{project_id}/nodes/suspend',
#Project
'projects': 'v2/projects',
'load_project': 'v2/projects/load',
'project_instance': 'v2/projects/{project_id}',
'close_project': 'v2/projects/{project_id}/close',
'duplicate_project': '/v2/projects/{project_id}/duplicate',
'export_project': 'v2/projects/{project_id}/export',
#'access_project_file': 'v2/projects/{project_id}/files/{path:.+}',
'import_project': 'v2/projects/{project_id}/import',
'project_notifications': 'v2/projects/{project_id}/notifications',
'project_notifications_websocket': 'v2/projects/{project_id}/notifications/ws',
'open_project': 'v2/projects/{project_id}/open',
#Server
'debug': 'v2/debug',
'settings' : 'v2/settings',
'shutdown': 'v2/shutdown',
'version': 'v2/version',
#Snapshot
'all_snapshots': 'v2/projects/{project_id}/snapshots',
'snapshot_info': 'v2/projects/{project_id}/snapshots/{snapshot_id}',
'restore_snapshot': '/v2/projects/{project_id}/snapshots/{snapshot_id}/restore'
}
#TODO implement later?
#Symbol
#/v2/symbols
#/v2/symbols/{symbol_id:.+}/raw
#Generate GNS3 address for requests
GNS3_ADDR = 'http://{0}:{1}'.format(GNS3_SERVER_ADDR, GNS3_SERVER_PORT)
GNS3_AUTH = HTTPBasicAuth(GNS3_USERNAME, GNS3_PASSWORD)
################################################################################
##########Appliance
################################################################################
def gns3_get_appliances_list():
r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['appliances']), auth=GNS3_AUTH)
return r.json()
#TODO finish the rest
################################################################################
##########Drawing
################################################################################
def gns3_get_drawings_list(project_id):
drawings_url = GNS3_URLS['drawings'].format(project_id=project_id)
r = requests.get('{0}/{1}'.format(GNS3_ADDR, drawings_url), auth=GNS3_AUTH)
return r.json()
def gns3_get_drawing(project_id, drawing_id):
drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id)
r = requests.get('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH)
return r.json()
def gns3_update_drawing(project_id, drawing_id):
drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id)
r = requests.put('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH)
return r.json()
def gns3_delete_drawing(project_id, drawing_id):
drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id)
r = requests.delete('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH)
#TODO what do we return?
return r
#TODO next categories
################################################################################
#########Server
################################################################################
def gns3_dump_debug_info():
r = requests.post('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['debug']), auth=GNS3_AUTH)
#TODO what do we return?
return r
def gns3_get_settings():
r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['settings']), auth=GNS3_AUTH)
return r.json()
def gns3_shutdown_server():
r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['shutdown']), auth=GNS3_AUTH)
#TODO what do we return?
return r
def gns3_get_version():
r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['version']), auth=GNS3_AUTH)
return r.json()
def gns3_compare_version(version_to_compare):
r = requests.post('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['version']), auth=GNS3_AUTH,
json={'version': str(version_to_compare)})
return r
################################################################################
##########Implementation
################################################################################
def gns3_nodes_information(project_id):
url = GNS3_URLS['nodes'].format(project_id=project_id)
r = requests.get('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH)
return r.json()
def gns3_links_information(project_id):
url = GNS3_URLS['links'].format(project_id=project_id)
r = requests.get('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH)
return r.json()
#Testing
# print(gns3_get_version())
# gns3_get_settings()
# print(gns3_shutdown_server())
# print(gns3_compare_version('2.1.12dev1'))
# print(gns3_get_drawings_list('a'))
\ No newline at end of file
Provided functionality in GNS3:
0: version information
1: drawing list
2: setting information
3: nodes information
4: links information
-1: close connection
Enter index:
\ No newline at end of file
#!/usr/bin/env python
import socket
import gns3
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024 # Normally 1024, but we want fast response
project_id ='83b40958-ede6-4dec-9cff-e11bdf38bbcc'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print('Connection address:', addr)
while 1:
index = conn.recv(BUFFER_SIZE).decode('utf-8')
if index == '0':
data = str(gns3.gns3_get_version())+str('END')
elif index == '1':
data = str(gns3.gns3_get_drawings_list(project_id))+str('END')
elif index == '2':
data = str(gns3.gns3_get_settings())+str('END')
elif index == '3':
info = gns3.gns3_nodes_information(project_id)
data = ''
for nodes in info:
data += str('name: ') + str(nodes.get('name')) + '\n'
data += str('node_id: ') + str(nodes.get('node_id')) + '\n'
if nodes.get('properties').get('platform'):
data += str('platform: ') + str(nodes.get('properties').get('platform')) + '\n'
data += '\n'
data += str('END')
elif index == '4':
info = gns3.gns3_links_information(project_id)
data = ''
for links in info:
data += str('link_id: ') + str(links.get('link_id')) + '\n'
nodes = links.get('nodes')
for node in nodes:
data += str('node_id: ') + str(node.get('node_id')) + '\n'
data += '\n'
data += str('END')
elif index == '-1':
data = str('close')+str('END')
conn.send(data.encode('utf-8')) # echo
break
else:
data = str('incorrect msg')+str('END')
conn.send(data.encode('utf-8')) # echo
conn.close()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment