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

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

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

Студворк — интернет-сервис помощи студентам
Всем привет.
Ребят помогите пожалуйста. Нужно написать мини прогу клиент и сервер которые используют 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2017, 14:36
Ответы с готовыми решениями:

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

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

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

14
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
20.03.2017, 12:43
mac-адрес не для этого. Он может использоваться для идентификации устройства или проверки уникальности, но адресацию по нему вы не сделаете.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.03.2017, 20:09
Цитата Сообщение от dondublon Посмотреть сообщение
но адресацию по нему вы не сделаете
Ну, не правда , адресацию по нему сделать, конечно, можно, другое дело, что работать оно будет исключительно в локальной сети, не совсем понятно назначение такой связи и главное, не всякая система даст скрафтить сырой ethernet фрейм, по крайней мере socket такое даст сделать, наверное, только в linux и с правами.

А вот scapy может, кстати, справиться.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
22.03.2017, 10:09
Jabbson, не представляю, как это можно осуществить технически.
Замечание про локальную сеть понятно. Пусть даже в локальной сети.
Свич хранит в себе соответствие mac-ip. tcp-пакеты отправляются на ip адрес, а другой тип пакета ("адресуй меня на mac"), вроде бы, не предусмотрен.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.03.2017, 20:13
Цитата Сообщение от 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  [ТС]
Ну хорошо если это возможно, помогите с программкой. Нужно очень сильно.
Буду весьма и очень благодарен)
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.03.2017, 22:29
Цитата Сообщение от piji4eg Посмотреть сообщение
Ну хорошо если это возможно, помогите с программкой. Нужно очень сильно.
под линукс подойдет?
0
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
23.03.2017, 23:18  [ТС]
Хочется под винду)))))
Очень хочется...Не хочется ставить линукс на машины что бы проверить и показать...
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.03.2017, 23:41
Под винду можно, но не средствами socket, а через scapy
0
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
23.03.2017, 23:47  [ТС]
Если не сложно можете реализовать это и выложить код?
Я в питоне хуже чайника(((
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.03.2017, 00:24
То есть то что нужно вам будет устанавливать доп модуль - это ок?
0
1 / 1 / 1
Регистрация: 28.06.2016
Сообщений: 58
24.03.2017, 00:31  [ТС]
Если скажите что как и куда установить и программулина эта будет работать я готов потанцевать с бубном ибо мне это ужас как нужно)
Готов и модули ставить и библиотеки устанавливать только бы программулина разаботала)
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.03.2017, 07:51
хорошо, сейчас нарисую что-нибудь

Добавлено через 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 секунд
вывод на сервере, когда приходит пакет:

Code
1
2
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):

Code
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
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  [ТС]
За код спасибо буду пробовать запускать что бы работал)
А вот такой вопрос, нельзя ли эту же штуку провернуть на 2,7 питоне?)
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.03.2017, 18:03
Можно

Добавлено через 4 часа 8 минут
для этого нужно поставить не scapy-python3, а просто scapy.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2017, 18:03
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru