Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
1

Клиент сервер через mac адрес

03.03.2017, 14:36. Показов 3815. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Ребят помогите пожалуйста. Нужно написать мини прогу клиент и сервер которые используют mac адрес.
У меня есть пример с Ip адресом.
Сервер
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from socket import *
from time import ctime
HOST = ''
PORT = 3000
BUFSIZE = 1024
SOCKADDR = (HOST,PORT)
uServSock = socket(AF_INET,SOCK_DGRAM)
uServSock.bind(SOCKADDR)
while True:
    print 'waiting:'
    data,addr = uServSock.recvfrom(BUFSIZE)
    loc_data = data.decode('cp1251') 
    print 'receivedd from: ', addr, ' data: ', loc_data 
    uServSock.sendto('[%s] %s' % (ctime(),data), addr)
uServSock.close()
Клиент
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from socket import *
HOST = '127.0.0.1'
PORT = 3000
BUFSIZE = 1024
SOCKADDR = (HOST,PORT)
uCliSock = socket(AF_INET,SOCK_DGRAM)
while True:
    data = raw_input('>')
    if not data: break
    uCliSock.sendto(data, SOCKADDR)
    data, addr = uCliSock.recvfrom(BUFSIZE)
    if not data: break
    print data
uCliSock.close()
Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2017, 14:36
Ответы с готовыми решениями:

Недопустимый MAC-адрес. MAC-адрес не может быть адресом рассылки
Привет! Потребовалось выполнить привязку IP-адреса к MAC-адресу двух устройств. С первым...

Сокеты. Клиент-сервер. Как узнать MAC?
Засада!!!!! Не могу получить Mac адрес у клиент-серверного приложения на Winsock. На сервере:...

Клиент-сервер.. IP-адрес подключившегося
Взял за основу такой сервер (эхо): #include <sys/types.h> #include <sys/socket.h> #include...

Получить ip адрес клиента (асинхронный клиент - сервер)
Не могу получить ip адрес клиента (асинхронный клиент - сервер) при получении сообщения на стороне...

Включение компьютера через MAC адрес
Привет люди У меня 1 вопрос, как можно реализовать включение компиютера через MAC адрес? без...

14
Эксперт Python
4633 / 2051 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
20.03.2017, 12:43 2
mac-адрес не для этого. Он может использоваться для идентификации устройства или проверки уникальности, но адресацию по нему вы не сделаете.
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
21.03.2017, 20:09 3
Цитата Сообщение от dondublon Посмотреть сообщение
но адресацию по нему вы не сделаете
Ну, не правда , адресацию по нему сделать, конечно, можно, другое дело, что работать оно будет исключительно в локальной сети, не совсем понятно назначение такой связи и главное, не всякая система даст скрафтить сырой ethernet фрейм, по крайней мере socket такое даст сделать, наверное, только в linux и с правами.

А вот scapy может, кстати, справиться.
0
Эксперт Python
4633 / 2051 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
22.03.2017, 10:09 4
Jabbson, не представляю, как это можно осуществить технически.
Замечание про локальную сеть понятно. Пусть даже в локальной сети.
Свич хранит в себе соответствие mac-ip. tcp-пакеты отправляются на ip адрес, а другой тип пакета ("адресуй меня на mac"), вроде бы, не предусмотрен.
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
22.03.2017, 20:13 5
Цитата Сообщение от dondublon Посмотреть сообщение
tcp-пакеты отправляются на ip адрес
это никак к делу не относится, фрейм может не иметь не только TCP заголовка, но и IP заголовка. Свитчу, для того, чтобы скоммутировать фрагмент данных вовсе не нужна информация об IP, потому что в общем случае, если мы говорим про самый обыкновенный ненастраиваемый свитч, свитч даже не видит этого L3 заголовка, а коммутация происходит не на основе ARP таблицы, которая, как Вы правильно заметили, связывает IP и MAC, а на основе CAM Table, где связывается MAC адрес и интерфейс. Поэтому коммуникация устройств без ip адреса возможна, но, как я и сказал - только в контексте локальной сети и более того, одного L2 домена, т.е. между ними не может быть роутера, который бы захотел маршрутизировать этот пакет.
0
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
23.03.2017, 18:06  [ТС] 6
Ну хорошо если это возможно, помогите с программкой. Нужно очень сильно.
Буду весьма и очень благодарен)
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
23.03.2017, 22:29 7
Цитата Сообщение от piji4eg Посмотреть сообщение
Ну хорошо если это возможно, помогите с программкой. Нужно очень сильно.
под линукс подойдет?
0
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
23.03.2017, 23:18  [ТС] 8
Хочется под винду)))))
Очень хочется...Не хочется ставить линукс на машины что бы проверить и показать...
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
23.03.2017, 23:41 9
Под винду можно, но не средствами socket, а через scapy
0
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
23.03.2017, 23:47  [ТС] 10
Если не сложно можете реализовать это и выложить код?
Я в питоне хуже чайника(((
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
24.03.2017, 00:24 11
То есть то что нужно вам будет устанавливать доп модуль - это ок?
0
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
24.03.2017, 00:31  [ТС] 12
Если скажите что как и куда установить и программулина эта будет работать я готов потанцевать с бубном ибо мне это ужас как нужно)
Готов и модули ставить и библиотеки устанавливать только бы программулина разаботала)
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
24.03.2017, 07:51 13
хорошо, сейчас нарисую что-нибудь

Добавлено через 23 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
# client (sends data)
 
from scapy.all import *
 
a = Ether()
a.src = '02:42:ac:11:00:02'  # sender
a.dst = '02:42:ac:11:00:03'  # receiver
a.type = 0x1234
 
data = '...PAYLOAD...'
b = a/data
 
sendp(b)
Python
1
2
3
4
5
6
7
8
# server (reveices data)
 
from scapy.all import *
 
while True:
    a = sniff(count=1)
    if a[0].fields['type'] == 0x1234:
        print('from {}, to {}, data: {}'.format(a[0].src, a[0].dst, a[0].load))
Добавлено через 56 секунд
вывод на сервере, когда приходит пакет:

Код
from 02:42:ac:11:00:02, to 02:42:ac:11:00:03, data: b'...PAYLOAD...'
from 02:42:ac:11:00:02, to 02:42:ac:11:00:03, data: b'...PAYLOAD...'
Добавлено через 1 минуту
Устанавливать нужно пакет scapy-python3 на третий питон.

Добавлено через 6 часов 26 минут
Ну и чтобы не быть голословным, и для потомков - второй вариант - для linux, с помощью socket.
две виртуалки в одном l2 сегменте - c первой посылаем сначала пинг, потом два сырых Ethernet пакета, на второй виртуалке слушаем tcpdump-ом.


VM1:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from socket import *
 
gethostbyname(gethostname())
'172.17.0.2'
 
import subprocess
subprocess.call(['/bin/ping', '172.17.0.3', '-c 1'])
 
 
def send_eth(src, dst, eth_type, payload, interface="eth0"):
    s = socket(AF_PACKET, SOCK_RAW)
    s.bind((interface, 0))
    return s.send(dst + src + eth_type + payload)    
 
 
src = b'\x02\x42\xac\x11\x00\x02'
dst = b'\x02\x42\xac\x11\x00\x03'
ptype = b'\x80\x88'
payload = bytes('{}{}{}'.format('.'*10, 'PAYLOAD', '.'*10), encoding='utf-8')
 
send_eth(src, dst, ptype, payload)
send_eth(src, dst, ptype, payload)




VM2 (running tcpdump):

Код
tcpdump -i eth0 -vvv -XX
...
...

20:02:00.475705 IP (tos 0x0, ttl 64, id 22930, offset 0, flags [DF], proto ICMP (1), length 84)
    172.17.0.2 > 172.17.0.23: ICMP echo request, id 7, seq 0, length 64
    0x0000:  0242 ac11 0003 0242 ac11 0002 0800 4500  .B.....B......E.
    0x0010:  0054 5992 4000 4001 88ef ac11 0002 ac11  .TY.@.@.........
    0x0020:  0003 0800 faf8 0007 0000 38d8 d258 0000  ..........8..X..
    0x0030:  0000 6d3d 0700 0000 0000 0001 0203 0405  ..m=............
    0x0040:  0607 0809 0a0b 0c0d 0e0f 1011 1213 1415  ................
    0x0050:  1617 1819 1a1b 1c1d 1e1f 2021 2223 2425  ...........!"#$%
    0x0060:  2627                                     &'

...
...

20:04:50.640816 02:42:ac:11:00:02 (oui Unknown) > 02:42:ac:11:00:03 (oui Unknown), ethertype Unknown (0x8088), length 41:
    0x0000:  0242 ac11 0003 0242 ac11 0002 8088 2e2e  .B.....B........
    0x0010:  2e2e 2e2e 2e2e 2e2e 5041 594c 4f41 442e  ........PAYLOAD.
    0x0020:  2e2e 2e2e 2e2e 2e2e 2e                   .........



20:05:01.058007 02:42:ac:11:00:02 (oui Unknown) > 02:42:ac:11:00:03 (oui Unknown), ethertype Unknown (0x8088), length 41:
    0x0000:  0242 ac11 0003 0242 ac11 0002 8088 2e2e  .B.....B........
    0x0010:  2e2e 2e2e 2e2e 2e2e 5041 594c 4f41 442e  ........PAYLOAD.
    0x0020:  2e2e 2e2e 2e2e 2e2e 2e                   .........
^C
1
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
24.03.2017, 08:19  [ТС] 14
За код спасибо буду пробовать запускать что бы работал)
А вот такой вопрос, нельзя ли эту же штуку провернуть на 2,7 питоне?)
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
24.03.2017, 18:03 15
Можно

Добавлено через 4 часа 8 минут
для этого нужно поставить не scapy-python3, а просто scapy.
0
24.03.2017, 18:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2017, 18:03
Помогаю со студенческими работами здесь

TCP клиент-сервер - Требуемый адрес для своего контекста не верен
Реализован клиент и сервер. Сервер - консольное приложение. Клиент - приложение WinForms ...

как подключить 2 компьютера через роутер указывая один MAC адрес?
Тем похожих тьма но вроде этого не смог найти. Ситуация такая: 1. Интернет через кабель без модема...

Подключиться к коммутатору D-link через телнет и получить MAC-адрес на определенном порте
Приветствую! Имеется некий bash скрипт, суть которого подключиться к коммутатору D-link через...

Какой mac адрес используется при удаленном подключении к рабочему столу и заблокировать доуступ к компьютеру по mac?
Я совсем не разбираюсь в этой теме... Есть два компа - сервер и левый. Левый подключается к...

Как найти ip адрес устройства в локальной сети зная его MAC адрес?
Имеется web-server который реализован на контроллере, мне нужно ловить его так как ip он получает...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru