def tcp_handshake_check(self, HOST, iteration):

		self.tor_port = self.is_tor_running()
		self.msg_to_set = "url:" + HOST
		# ---------------------------------------------------------------DNS resolution-----------------------------------------------
		self.print1("Checking TCP for url: " + str(HOST))
		report_object = []
		isResolved = False
		ipListRemote = []
		for i in range(iteration):
			idRemote, messageRemote, answersFromRemote = dnsOb.QueryToRemoteDnsServer(HOST)
			if idRemote == 1:
				isResolved = True
				for answer in answersFromRemote:
					if answer.to_text() not in str(ipListRemote):
						ipListRemote.append(answer.to_text())
		if not isResolved:
			self.print1("Domain doesnot exist")
			return report_object

		ip_itr = 1
		## TO DO !!!

		statusTor = False
		statusLocal = False

		# --------------------- My beginning --------------------------------------
		# For HTTP
		for ip in ipListRemote:  # EACH IP
			port = 80
			report = Report()
			report.tcp_description = TCPDescription()
			report.type_of_testing = "TCP"
			report.tcp_description.ip_address = ip
			report.tcp_description.port_number = 80
			self.print1("Checking(" + ip + ", " + port.__str__() + ")")
			statusTor = False
			for j in range(self.Iterate):

				statusTor = dnsOb.socketConnectTor(ip, port)
				if not statusTor:  # Do not check for local server connection
					self.print1("tor attempt " + j.__str__() + " unsuccessfull")
					pass
				if statusTor:
					self.print1("tor attempt " + j.__str__() + " successfull")
					report.tcp_description.successful_iteration_number_tor = (j + 1)
					for k in range(self.Iterate):
						statusLocal, socket_state = dnsOb.socketConnectLocal(ip, port)
						if not statusLocal:
							self.print1("local attempt " + k.__str__() + " unsuccessfull")
							time.sleep(2)
						if statusLocal:
							self.print1("local attempt " + k.__str__() + " successfull")
							report.tcp_description.successful_iteration_number_local_server = (k + 1)
							break

					if not statusLocal:
						self.print1("------------->>>Inside if not statusLocal: condition")
						status, self.hop_count_http, message = dnsOb.tcp_ttl_find(ip, port, 2)
						self.print1("===>>>Obtained status = " + str(status) + ", hop_cnt_http = " + str(self.hop_count_http))
						if status:
							report.tcp_description.successful_iteration_number_local_server = self.Iterate
						else:
							report.is_censored = 1
							if socket_state == 2:
								report.tcp_description.is_time_out = 1
							elif socket_state == 7:
								report.tcp_description.is_rst_bit_set = 1
							else:
								report.tcp_description.is_fin_bit_set = 1
							if self.hop_count_http == -1:
								self.print1("middlebox hop count : Not found")
								report.tcp_description.middle_box_hop_count = -1
							else:
								self.print1("middlebox hop count : " + self.hop_count_http.__str__())
								report.tcp_description.middle_box_hop_count = self.hop_count_http
					break

			if not statusTor:  # Full connection failure via tor
				report.tcp_description.is_tor_connect_successful = 0
			# self.print1("--->>APPENDING TO REPORT ARRAY ... printing report")
			report.printReport()
			report_object.append(report)

		# --------------------- Now for HTTPS --------------------------------------
		# ipIter = 0
		for ip in ipListRemote:  # EACH IP
			port = 443
			report = Report()
			report.tcp_description = TCPDescription()
			report.type_of_testing = "TCP"
			report.tcp_description.ip_address = ip
			report.tcp_description.port_number = 443
			self.print1("checking(" + ip + ", " + port.__str__() + ")")
			statusTor = False
			for j in range(self.Iterate):

				statusTor = dnsOb.socketConnectTor(ip, port)
				if not statusTor:  # Do not check for local server connection
					self.print1("tor attempt " + j.__str__() + " unsuccessfull")
					pass
				if statusTor:
					self.print1("tor attempt " + j.__str__() + " successfull")
					report.tcp_description.successful_iteration_number_tor = (j + 1)
					for k in range(self.Iterate):
						statusLocal, socket_state = dnsOb.socketConnectLocal(ip, port)
						if not statusLocal:
							self.print1("local attempt " + k.__str__() + " unsuccessfull")
							time.sleep(2)
						if statusLocal:
							self.print1("local attempt " + k.__str__() + " successfull")
							report.tcp_description.successful_iteration_number_local_server = (k + 1)
							break

					if not statusLocal:
						status, self.hop_count_http, message = dnsOb.tcp_ttl_find(ip, port, 2)
						if status:
							report.tcp_description.successful_iteration_number_local_server = self.Iterate
						else:
							report.is_censored = 1
							if socket_state == 2:
								report.tcp_description.is_time_out = 1
							elif socket_state == 7:
								report.tcp_description.is_rst_bit_set = 1
							else:
								report.tcp_description.is_fin_bit_set = 1
							if self.hop_count_http == -1:
								self.print1("middlebox hop count : Not found")
								report.tcp_description.middle_box_hop_count = -1
							else:
								self.print1("middlebox hop count : " + self.hop_count_http.__str__())
								report.tcp_description.middle_box_hop_count = self.hop_count_http
					break

			if not statusTor:  # Full connection failure via tor
				report.tcp_description.is_tor_connect_successful = 0
			report_object.append(report)

		return report_object
Ejemplo n.º 2
0
def processMessage(msg):
	# print("Inside message -->" + msg)
	split_msg = msg.split('$')
	if not isSourceJava(split_msg[0]):
		return

	userID = getSecondColumn(split_msg[1])
	connectionID = getSecondColumn(split_msg[2])
	typeOfTesting = getSecondColumn(split_msg[3])
	timestamp = getSecondColumn(split_msg[4])
	url = getSecondColumn(split_msg[5])

	if url == 'none':
		print("url is none so return")
		return

	isFile = getSecondColumn(split_msg[6])  # isFile -> 0 then only url check ... so DO NOT add to database
	periodicity = getSecondColumn(split_msg[7])
	isPeriodic = getSecondColumn(split_msg[8])

	fileNamePeriodic = "NULL"
	iterationNumber = -1  # Initialise to -1
	if periodicity == 'forced':
		iterationNumber = 0  # Initial check is 0th
	if isPeriodic == 1:
		fileNamePeriodic = getSecondColumn(split_msg[9])
		iterationNumber = getSecondColumn(split_msg[10])

	if typeOfTesting == 'DNS':
		print('Run DNS .... inside pythonServer.py')
		dns_check = DNS_CENSORSHIP()
		if isFile == 0:
			dns_check.ADD_TO_DATABASE = 0

		db = DBHandler()
		# db.checkAndMakeConnection(userID) 	#TO DO  [Problem [NoneType etc]]

		dns_check.dns_censorship_check(url)  # Actually does NOT RETURN
		report = dns_check.report
		# Further modifications ....
		report.url = url
		report.time_stamp = datetime.now().strftime('%d-%m-%Y %H:%M:%S')  # In this format
		report.is_file_check = isFile
		report.is_periodic = isPeriodic
		report.file_name_periodic = fileNamePeriodic
		report.iteration_number = iterationNumber
		report.type_of_testing = "DNS"
		# print("Inside pythonServer.py ... typeOfTesting('dns') <PRINTING REPORT> url = " + url)
		# report.printReport()

		db.handleReport_DNS(report)

	elif typeOfTesting == 'TCP':
		print('Run TCP ..... inside pythonServer.py')

		tcp_check = TCP_3_WAY_HANDSHAKE()

		db = DBHandler()
		# Check for 5 iterations
		report_arr = tcp_check.tcp_handshake_check(url, 5)

		report = Report()
		report.url = url
		report.time_stamp = datetime.now().strftime('%d-%m-%Y %H:%M:%S')  # In this format
		report.is_file_check = isFile
		report.is_periodic = isPeriodic
		report.file_name_periodic = fileNamePeriodic
		report.iteration_number = iterationNumber
		report.type_of_testing = "TCP"

		# print("---------------------------INSIDE pythonServer.py report_arr.len = " + len(report_arr).__str__() + "-----------------")

		# for rep in report_arr:
			# rep.printReport()

		# print("----------------------------- DONE PRINTING REPORT [dbHandler.handle report is commented out for now]-----------------------")

		if len(report_arr) > 0:
			report.censorship_details = report_arr[0].censorship_details
			# report.is_censored = report_arr[0].is_censored
			is_cens = 1
			for rep in report_arr:
				if rep.tcp_description.is_censored_TCP == 0:
					is_cens = 0
			report.is_censored = is_cens


			report.censorship_details = report_arr[0].censorship_details

			report.tcp_description_arr = []

			for rep in report_arr:
				rep.tcp_description.is_censored_TCP = rep.is_censored  # For each TCP_Description ...
				report.tcp_description_arr.append(rep.tcp_description)

		db.handleReport_TCP(report)
		# print("Now inside pythonServer.py ... printing report")
		# report.printReport()

	elif typeOfTesting == 'HTTP':
		print('>>>> Run HTTP ..... inside pythonServer.py')

		http_obj = http_https_data()  # For HTTP Checking

		db = DBHandler()

		rep_HTTP, rep_HTTPS = http_obj.check_http_https_censorship(url)

		rep_HTTP.url = url
		rep_HTTP.time_stamp = datetime.now().strftime('%d-%m-%Y %H:%M:%S')  # In this format
		rep_HTTP.is_file_check = isFile
		rep_HTTP.is_periodic = isPeriodic
		rep_HTTP.file_name_periodic = fileNamePeriodic
		rep_HTTP.iteration_number = iterationNumber
		rep_HTTP.type_of_testing = "HTTP"

		rep_HTTPS.url = url
		rep_HTTPS.time_stamp = datetime.now().strftime('%d-%m-%Y %H:%M:%S')  # In this format
		rep_HTTPS.is_file_check = isFile
		rep_HTTPS.is_periodic = isPeriodic
		rep_HTTPS.file_name_periodic = fileNamePeriodic
		rep_HTTPS.iteration_number = iterationNumber
		rep_HTTPS.type_of_testing = "HTTPS"


		# Put everything in one report ...
		rep_HTTP.copyHTTPSDescription(rep_HTTPS)

		db.handleReport_HTTP(rep_HTTP)

	elif typeOfTesting == 'ALL':
		print('Run All ..... ')
	else:
		return