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

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

03.03.2017, 14:36. Показов 4594. Ответов 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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru