LINUX.ORG.RU

2
Всего сообщений: 34

Закрыть icmp в ufw

Добрый день! На сервере 2 сетевые, debian 11, ufw в качестве файрвола. Не получается закрыть пинги извне. Т.е.только для одного из интерфейсов. Подскажите, пожалуйста правильное написание команды.

 ,

Northern ()

Почему копия /usr/bin/ping пингует не смотря ни на что?

Всем привет. Такой странный вопрос возник

Дистрибутив Manjaro. Копирую /usr/bin/ping в домашнюю директорию. В результате чего локальный пинг получает привелегии обычного юзера. Запускаю ./ping 8.8.8.8 - пингует. Переименовываю файл, запускаю ./shming 8.8.8.8 - рабтает!

А ведь вроде не должно? Локальный юзер по идее не может создавать RAW сокеты. Почему тогда пингует?

 , ,

kijllfatncdaplp ()

Redirect Host на Debian

Всем привет. Поднял openvpn на debian. При попытке пинговать соседний хост происходит следующее:

 ✘ u0000@da187db8-d970-4430-9279-28cc05f2016d  ~  ping 10.8.0.3                  
ping: socket: Семейство адресов не поддерживается протоколом
PING 10.8.0.3 (10.8.0.3) 56(84) bytes of data.
64 bytes from 10.8.0.3: icmp_seq=1 ttl=63 time=339 ms
From 10.8.0.1 icmp_seq=2 Redirect Host(New nexthop: 10.8.0.3)
64 bytes from 10.8.0.3: icmp_seq=2 ttl=63 time=261 ms
From 10.8.0.1 icmp_seq=3 Redirect Host(New nexthop: 10.8.0.3)
64 bytes from 10.8.0.3: icmp_seq=3 ttl=63 time=157 ms
From 10.8.0.1 icmp_seq=4 Redirect Host(New nexthop: 10.8.0.3)
64 bytes from 10.8.0.3: icmp_seq=4 ttl=63 time=206 ms
From 10.8.0.1 icmp_seq=5 Redirect Host(New nexthop: 10.8.0.3)
64 bytes from 10.8.0.3: icmp_seq=5 ttl=63 time=199 ms
^C
--- 10.8.0.3 ping statistics ---
5 packets transmitted, 5 received, +4 errors, 0% packet loss, time 4001ms
rtt min/avg/max/mdev = 156.529/232.375/338.808/62.811 ms

Я не очень разбираюсь в сетях. Что это означает? Это надо исправлять? Почему такое происходит?

 , ,

u0000 ()

Нет ответа на пинг при запуске через crontab и openvpn(tun)

проблемка - нет ответа на пинг при запуске через crontab(vixie-cron).
Стоит OpenVPN серверная часть на шлюзе. Делаю контроль «качества сети»(пинга) клиента через OpenVPN.
В OpenVPN настроено через TUN-интерфейс(tun0) в режиме topology subnet.
Клиентский ip(vpn) - 192.168.1.1
Серверный ip(vpn) - 192.168.1.254

Связь в норме. В интерактивном режиме пользователя(root|nginx) - пинг отвечает без проблем!!!

в кронтабе(root|nginx) записан максимально упрощенный вариант
*/5 * * * * /bin/ping -I tun0 192.168.1.1
приходит почта с кронтаба - в ней видно 100% потеря пакетов.

Смотрел «tcpdump -vvvv -n -i tun0 host 192.168.1.1 and icmp»
Идентичные параметры для исходящего пакета как в случае интерактивного запуска под пользователем так и для планого запуска через crontab!
А вот входящего пакета-ответа в случае crontab - НЕТУ!!!
Только в случае интерактивного сеанса.

SELINUX - отключен! Chroot для crontab - не делал!

Также проверил вариант «/bin/ping -I eth0 10.0.0.1» - т.е. пинг на комп во локальной сети.
ОБА ВАРИАНТА(интерактивный и плановый ) ОТРАБОТАЛИ НОРМАЛЬНО!

В общем мои мысли закончились.... прошу помощи в студии...

 

Atlant ()

icmp tunnel

debian vps и debian клиент.

клиент находится в сети с кучей ограничений вплоть до того, что по ssh подключиться на сервер не могу, работает только пинг. воспользовавшись услугой помощь друга был поднят hanstunnel. однако не смотря на то, что icmp пакеты между клиентом и vps бегают нормально, даже с 1500 mtu, туннель не поднимается. когда запускаю клиентский hans

./hans -s 192.168.25.1 -p pass

./hans -c bla.bla.bla.bla -p pass

он просто как будто долбится в пустоту. пробовал то же самое между двумя машинами в одной сети - (естественно) оно работает. тогда никак не пойму как оно может не работать с удаленным хостом если все, что нужно это рабочий пинг! информации по этому вопросу много не нашел, в основном только элементарные мануалы по поднятию установке и запуску. да и проблематично мне сейчас искать, поскольку инет лимитирован по времени в сутки (собственно откуда и взялась идея с hanstunnel).

у кого есть опыт icmp туннелирования, подскажите куда посмотреть.

обновлено:

такое впечатление, что на роутере настроен просто редирект и весь мой icmp трафик тупо заруливается мне обратно. хотя на сервере в дебаге ханса появились записи unknown client

 , , ,

flant ()

nat + udp/icmp/other_non_tcp

Объясните пожалуйста, как ответы на ping или, например, на запросы DNS по UDP проходят через NAT? Если с TCP вроде понятно, создавая сессию, NAT в состоянии удерживать открытый порт для клиента за NATом до момента закрытия сессии и транслировать адрес/порт, то как это выглядит в случае с, например, UDP запросом к DNS серверу?

Например в таком setup:

10.0.0.12 (client) <-> 10.0.0.1/NAT_external_ip (gateway) <-> DNS_server_external_ip

Если client посылает UDP запрос к DNS серверу, то DNS сервер ведь пошлет обратно UDP ответ NAT_external_ip и неизвестно как долго ответ будет идти обратно. У gateway есть какой-то timeout? Т.е. например если client посылает пакет с:

from: 10.0.0.12
to: DNS_server_external_ip:some_port

Когда пакет приходит к gateway, gateway переписывает его как:

from: NAT_external_ip:some_other_port
to: DNS_server_external_ip:some_port

И теперь приходит ответ от DNS_server_external_ip:

from: DNS_server_external_ip
to: NAT_external_ip:some_other_port

Теперь NAT_external_ip может содержать у себя локально информацию, что пакеты, которые приходят на NAT_external_ip:some_other_port следует отослать 10.0.0.12, но ведь сессии как таковой нету. Как долго эта информация будет актуальна? У NAT_external_ip есть по этому поводу какой-то конфигурируемый timeout? Если в случае с TCP gateway может «забыть» эту информацию при закрытии TCP сессии, то как быть с UDP/ICMP и тому подобным протоколам где понятий «закрытие/открытие сесси» нету?

 , ,

dissident ()

Juniper SRX падает от icmp-флуда

Сегодня обнаружил веселый баг железок juniper srx240h- они падают от icmp-флуда. Причем падают от предельно простого однострочника:

for i in {1..200}; do ping -c 30000 -i 0 -s 32 -q $IP & done
Причем даже блокировка ICMP не помогает. Прочитал статейку https://www.juniper.net/documentation/en_US/junos/topics/topic-map/security-n..., сделал как написано и ничего. Канал у джуна широкий, около 600 мбит между ДЦ, но падает он при нагрузке в ~120 мбит от флуда. Рядом стоит шлюз на лине и ему вообще пофик, пытался завалить его с двух ДЦ - тщетно, а джун ложится от одной виртуалки. Кто сталкивался с таким? Как можно пофиксить?

 , ,

Sherman ()

Какие ICMPv6 пакеты нужно разрешить на фаерволе?

На интерфейс прилетают кучи странных пакетов со странными адресами источника и получателя вида fe80:.... Я не совсем до конца понимаю, как это всё работает, не будет ли вреда, если я запрещу весь ICMP 6 кроме пинг-запросов на мой IP? Там всякие ndp не сломаются? У меня тупо один адрес (не подсеть), сконфигурированный статически, никакими броадкастами не пользуюсь, по крайней мере осознанно. NDP мне вроде бы тоже не нужен, но я не уверен.

 ,

Legioner ()

Лишние логи в pflog

Хочу настроить pf так, чтобы логгировались все незаматченные пакеты (чтобы было видно, что я ещё не учёл). Заметил, что на интерфейсе много каких-то icmp6 пакетов и попытался их заматчить по типу. Получился такой вот набросок

set skip on lo

pass log

pass in on vio0 inet6 proto icmp6 icmp6-type {listqry listenrep neighbrsol}

Идея в том, что те пакеты, которые проходят по последнему правилу, логгироваться не должны (т.к. я не указал там log).

Однако по факту они вполне себе логгируются. Причём в правило они, вроде, попадают. Пробовал ставить quick (во втором правиле), то же самое получается. Ещё странность в том, что IP-адреса на этих пакетах по-моему вообще не принадлежат ни мне, ни роутеру, не знаю, влияет ли это на что-либо. Ещё странность в том, что с дефолтным pf.conf-ом, в котором нет никакого упоминания про log, всё равно создаётся /var/log/pflog и туда чего-то там логгирует. В общем не пойму я, как это всё работает.

Пример заматченного пакета

12:51:17.333964 rule 2/(match) pass in on vio0: fe80::225:90ff:fe04:ac74 > ff02::1:ff00:122: HBH icmp6: multicast listener report  [hlim 1]
  0000: 6000 0000 0020 0001 fe80 0000 0000 0000  `.... ..........
  0010: 0225 90ff fe04 ac74 ff02 0000 0000 0000  .%.....t........
  0020: 0000 0001 ff00 0122 3a00 0502 0000 0100  .......":.......
  0030: 8300 4240 0000 0000 ff02 0000            ..B@........
Разбирал его по байтам, вроде обычный пакет, тип 0x83 == 131 == listenrep.

Собственно сделал вообще простейший pf.log с одной строкой: set skip on lo и в логах всё равно пишутся пакеты. Причём вида 13:10:07.313586 rule def/(match) pass in on vio0: fe80::225:90ff:fea1:3104 > ff02::1:ffa1:3104: HBH icmp6: multicast listener report [hlim 1], т.е. тут какое-то правило match по умолчанию стоит. Что за правило такое, где его можно найти и как отключить?

 , , ,

Legioner ()

Не срабатывает правило на ICMP6 Neighbor advertisement

OpenBSD 6.4. Значимые строчки из pf.conf:

block log
pass in quick on vio0 inet6 proto icmp6 icmp6-type neighbradv code 0

Т.е. смысл в том, чтобы пропускать этот пакет без лога. Судя по pflog они этим правилом не ловятся:

16:34:36.321539 rule 0/(match) block in on vio0: fe80::225:90ff:fed4:e03e > ff02::1: [|icmp6]
  0000: 6000 0000 0020 3aff fe80 0000 0000 0000  `.... :.........
  0010: 0225 90ff fed4 e03e ff02 0000 0000 0000  .%.....>........
  0020: 0000 0000 0000 0001 8800 aafe 2000 0000  ............ ...
  0030: 2a04 52c0 0101 0502 0000 0000            *.R.........

Другие ICMP6 пакеты ловятся (похожим правилом). Пытался по байтам разобрать пакет, вроде ICMP6 пакет именно указанного типа. Пытался ловить более общими правилами:

pass in quick on vio0 inet6 proto icmp6
pass in quick on vio0 inet6 proto icmp6 icmp6-type neighbradv
тоже не ловятся (другие пакеты вроде пингов нормально ловятся).

 , , , ,

Legioner ()

nping: network unreachable считается удачным ответом

Всем привет. В своё время долго ржал над виндовым ping-ом, который сам себе отвечал, что «заданный узел недоступен», считая эти «ответы» как успешные, и выдавая статус успешной операции по итогу. Ну ладно, то винда. Но вот теперь обнаруживаю, что nping ушёл совсем недалеко:

# nping --interface eth0 --icmp --dest-mac 00:21:91:98:6A:75 -c 3 --delay 0.2 A.B.C.D

Starting Nping 0.7.60 ( https://nmap.org/nping ) at 2018-12-27 13:18 EET
SENT (0.8063s) ICMP [192.168.1.59 > A.B.C.D Echo request (type=8/code=0) id=12718 seq=1] IP [ttl=64 id=60290 iplen=28 ]
SENT (1.0068s) ICMP [192.168.1.59 > A.B.C.D Echo request (type=8/code=0) id=12718 seq=2] IP [ttl=64 id=60290 iplen=28 ]
RCVD (1.0081s) ICMP [192.168.1.1 > 192.168.1.59 Network A.B.C.D unreachable (type=3/code=0) ] IP [ttl=64 id=1646 iplen=56 ]
RCVD (1.0081s) ICMP [192.168.1.1 > 192.168.1.59 Network A.B.C.D unreachable (type=3/code=0) ] IP [ttl=64 id=1647 iplen=56 ]
SENT (1.2074s) ICMP [192.168.1.59 > A.B.C.D Echo request (type=8/code=0) id=12718 seq=3] IP [ttl=64 id=60290 iplen=28 ]
RCVD (1.2173s) ICMP [192.168.1.1 > 192.168.1.59 Network A.B.C.D unreachable (type=3/code=0) ] IP [ttl=64 id=1648 iplen=56 ]

Max rtt: 9.828ms | Min rtt: 1.287ms | Avg rtt: 4.219ms
Raw packets sent: 3 (126B) | Rcvd: 3 (168B) | Lost: 0 (0.00%)
Nping done: 1 IP address pinged in 1.22 seconds
Как видно, поведение почти то же самое, только он хоть не сам себе отвечает. О том, что заданная сеть недоступна, отвечает ему роутер, что, конечно, чистая правда. Но почему это считается успешным прохождением пакета? И, главное, как эту тварь заставить не считать успехом ответ от роутера о невозможности связаться с хостом?

Я его, на самом деле, использую с опцией -q, и анализирую только суммарный ответ: сколько пакетов потеряно. Какой-нибудь более вменяемый выход есть, кроме как анализировать весь вывод целиком и считать строчки с успешным ответом именно от целевого хоста?

Какой-нибудь другой ping подойдёт, только если у него есть аналог опции "--dest-mac", но я такого больше не знаю.

PS Я даже не говорю о том, что nping всегда возвращает success, и узнать результат пинга можно, только проанализировав его stdout. Это, конечно, жесть, но об этом, хотя бы, в документации написано.

 ,

shamus24 ()

TCP SYN/ACK/RST-туннель

Пробовал ICMP-туннелирование для обхода учёта трафика — не прокатило.

Другой метод, который может быть использован для тех же целей — это передача данных в payload TCP SYN/ACK-пакетов. Не нашёл только готовых реализаций такого туннеля. Может кто знает?

(хотя если учитывается любой payload IP-пакетов, то учёт трафика не обойти никак).

 , ,

utf8nowhere ()

ICMP ping пример

http://php.net/manual/ru/function.socket-create.php#101012

Вот так в примере описывается пакет:

$package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";

Смотрим ICMP протокол, раздел формат пакета:

Тип - 8 байт,

Код - 8 байт,

Контрольная сумма - 16 байт

Вопрос1 и 2: где? что? (для данного пакета)

Вопрос3 и 4: как выглядит пакет с данными, которые отправляет утилита ping?

 , ,

sniper21 ()

Не работает пинг с сервера

Доброго времени суток!

Есть проблема с пингом на любые направления с сервера (ОС Ubuntu 12.04), в том числе не пингуется default gateway. Через некоторое время пинг и трассировка перестаёт работать, в то же время всё, что по tcp/udp работает без проблем. Помогает только перезагрузка, /etc/init.d/networking restart не спасает. Ситуацию осложняет то, что его настраивал не я

В iptables на момент проблемы ICMP разрешен явным образом (в INPUT и OUTPUT )

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere             icmp any
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             state NEW multiport dports ftp,ssh,smtp,domain,http,pop3,ntp,imap2,https,1500,gnunet,2087,8443,webmin,42222
ACCEPT     udp  --  anywhere             anywhere             multiport dports domain,ntp
ACCEPT     udp  --  anywhere             anywhere             udp dpt:9987
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:10011
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:30033
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:2008
ACCEPT     udp  --  anywhere             anywhere             udp dpt:2010
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:41144

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     icmp --  anywhere             anywhere             icmp any
ACCEPT     udp  --  anywhere             anywhere             udp dpt:9987
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:10011
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:30033
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:2008
ACCEPT     udp  --  anywhere             anywhere             udp dpt:2010
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:41144

через tcpdump видно что пакеты уходят, но ответа нет

 tcpdump -vv icmp
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
00:35:05.837421 IP (tos 0x0, ttl 64, id 10078, offset 0, flags [DF], proto ICMP (1), length 84)
    xxxxxxxxx > ya.ru: ICMP echo request, id 10696, seq 1875, length 64
00:35:06.837479 IP (tos 0x0, ttl 64, id 10297, offset 0, flags [DF], proto ICMP (1), length 84)
    xxxxxxxxx  > ya.ru: ICMP echo request, id 10696, seq 1876, length 64
00:35:07.837453 IP (tos 0x0, ttl 64, id 10544, offset 0, flags [DF], proto ICMP (1), length 84)
    xxxxxxxxx  > ya.ru: ICMP echo request, id 10696, seq 1877, length 64
00:35:08.837483 IP (tos 0x0, ttl 64, id 10748, offset 0, flags [DF], proto ICMP (1), length 84)
    xxxxxxxxx  > ya.ru: ICMP echo request, id 10696, seq 1878, length 64
00:35:09.837460 IP (tos 0x0, ttl 64, id 10848, offset 0, flags [DF], proto ICMP (1), length 84)
    xxxxxxxxx  > ya.ru: ICMP echo request, id 10696, seq 1879, length 64
00:35:10.837534 IP (tos 0x0, ttl 64, id 11011, offset 0, flags [DF], proto ICMP (1), length 84)
    xxxxxxxxx  > ya.ru: ICMP echo request, id 10696, seq 1880, length 64
00:35:11.837501 IP (tos 0x0, ttl 64, id 11038, offset 0, flags [DF], proto ICMP (1), length 84)
    xxxxxxxxx  > ya.ru: ICMP echo request, id 10696, seq 1881, length 64
00:35:12.837483 IP (tos 0x0, ttl 64, id 11106, offset 0, flags [DF], proto ICMP (1), length 84)
    xxxxxxxxx  > ya.ru: ICMP echo request, id 10696, seq 1882, length 64

На всякий случай sysctl -A | grep icmp

net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 0
net.ipv4.icmp_errors_use_inbound_ifaddr = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_ratelimit = 1000
net.ipv4.icmp_ratemask = 6168
error: permission denied on key 'net.ipv4.route.flush'
net.ipv6.icmp.ratelimit = 1000
error: permission denied on key 'net.ipv6.route.flush'
net.netfilter.nf_conntrack_icmp_timeout = 30
error: permission denied on key 'vm.compact_memory'

В логах и dmesg пусто, гугление не помогло (возможно я не так ищу). Подскажите, в какую сторону смотреть

 ,

CrazyTentacle ()

Вопрос по icmp

Доброго времени суток!

Уважаемые специалисты , года 3 назад я настраивал route-map на своей циске 800(точно не помню, что именно настраивал). Так вот при настройке вылез любопытный эффект .Не помню точно, то ли я пинговал что то, то ли трассировал маршрут ,ну вообщем пакет ушёл не далее моей домашней сети и начал прыгать между двух узлов ,пока не иссяк его ttl. Собственно вопрос: Каким образом можно повторить такой эффект? И что это вообще за эффект такой,как называется? В сети кроме циски работал ноут с ос убунту и сервачек ,так же с убунтой на борту.

 ,

lamer1 ()

Traceroute кол-во хопов

Здрово! Правильно я понимаю, что между сервером и хостом 15 роутеров?

traceroute -I -w 1 -n 123.11.22.33

traceroute to 123.11.22.33(123.11.22.33), 30 hops max, 60 byte packets
 1  10.20.22.11 0.316 ms  0.312 ms  0.342 ms
 2  10.20.30.40  0.523 ms  0.529 ms  0.530 ms
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  123.11.22.33  202.362 ms  202.895 ms  203.793 ms

 , ,

hax0r3l33t3 ()

проблемы с ping

Доброго дня!

Есть такая проблема: На роутере несколько сетевых интерфейсов с инетом разной метрики (пакеты, сразу скажу, не маркирую). Если я пингую так:

ping 8.8.8.8, то все ок, если же я пингую с указанием интерфейса:

ping -I eth0 8.8.8.8, то иногда теряются пакеты (может 1 на сотню, может 2 на 10 запросов).

Причем на шлюзe tcpdump-ом, я вижу, что пакет получен и переправлен в оба конца (и запрос и ответ):

64 bytes from 8.8.8.8: seq=12 ttl=55 time=11.390 ms

64 bytes from 8.8.8.8: seq=13 ttl=55 time=11.057 ms

64 bytes from 8.8.8.8: seq=15 ttl=55 time=11.144 ms

64 bytes from 8.8.8.8: seq=16 ttl=55 time=10.847 ms

tcpdump на шлюзе, который использует роутрер:

09:35:14.932770 IP 192.168.0.166 > google-public-dns-a.google.com: ICMP echo request, id 8610, seq 13, length 64

09:35:14.943412 IP google-public-dns-a.google.com > 192.168.0.166: ICMP echo reply, id 8610, seq 13, length 64

09:35:15.933037 IP 192.168.0.166 > google-public-dns-a.google.com: ICMP echo request, id 8610, seq 14, length 64

09:35:15.943640 IP google-public-dns-a.google.com > 192.168.0.166: ICMP echo reply, id 8610, seq 14, length 64

09:35:16.933291 IP 192.168.0.166 > google-public-dns-a.google.com: ICMP echo request, id 8610, seq 15, length 64

09:35:16.944013 IP google-public-dns-a.google.com > 192.168.0.166: ICMP echo reply, id 8610, seq 15, length 64

Подскажите, куда копать?)

 , ,

lasthappy ()

iptables recent (связка tcp & icmp)

Добрый день.

Третий день ищу в манах ответ на вопрос: почему не работает данная конструкция?

(смысл: правила 1, 2 и 3 по трем стукам в ping добавляют в таблицу LETMEIN записи, правило 5 дропает коннекты по tcp на порт 111 если в таблице LETMEIN нет 3 попаданий по ping)

1 iptables -A INPUT -p icmp --icmp-type echo-request -m recent --name LETMEIN --set
2 iptables -A INPUT -p icmp --icmp-type echo-request -m recent --name LETMEIN --update --seconds 10 --hitcount 1
3 iptables -A INPUT -p icmp --icmp-type echo-request -m recent --name LETMEIN --update --seconds 10 --hitcount 2

4 iptables -A INPUT -p icmp --icmp-type echo-request -m recent --name LETMEIN --rcheck --seconds 10 --hitcount 3 -j LOG --log-prefix "LETMEIN: "

5 iptables -A INPUT -p tcp -m multiport --dports 111 -m recent --name LETMEIN ! --rcheck --hitcount 3 -j DROP

Лог пишет что попадание правил 1,2,3 было, но правило 5 все равно срабатывает...

Терзают смутные сомнения что таблицы recent для TCP и ICMP разные, но нигде не смог найти тому подтверждение. Подскажите можно ли это как-то проверить и как выйти из ситуации?

 , , ,

kof ()

трассировка icmp

Привет всем. Никак не могу понять как правильно написать. Программа использует icmp протокол. Например я пингую хост, в настройках ip устанавливаю ttl++. В wireshark пишет некоректная чексумма, она такая, а должна быть такая. А как мне известно, что icmp с неправильной чексуммой не дождёться ответа, но, маршрут проходит до хоста, но последний хост в моей программе не отображаеться, хоть я могу сам дописать, но может что-то в чек сумме? Вот код.

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip_icmp.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <errno.h>
#include <stdlib.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <time.h>
#include <strings.h>
#include <sys/time.h>

unsigned short checksum(unsigned short *, int);

int main(int argc, char *argv[]){

	int sockfd;
	struct sockaddr_in dst;
	struct sockaddr_in from;
	struct hostent *ht;
	struct icmp *icmp;
	struct ip *ip;
	pid_t pid = getpid();
	static int icmplen = 64;
	char sendbuf[1500];
	char readbuf[1500];
	int ttl;
	int seq = 0;
	int len;

	if ((sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) == -1){
		perror("socket() failed");
		exit(-1);
	}

	if (setuid(getuid()) == -1)
		perror("setuid() failed");

	if ((ht = gethostbyname(argv[1])) == NULL){
		herror("gethostbyname() failed");
		exit(-1);
	}

	dst.sin_family = AF_INET;
	dst.sin_port = IPPROTO_ICMP;
	dst.sin_addr = *((struct in_addr *)ht->h_addr);
	

	for(ttl = 1; ttl <= 64; ttl++){
	  if(setsockopt(sockfd, SOL_IP, IP_TTL,&ttl,sizeof(ttl)) == -1){
  	  perror("setsockopt() failed");
   		exit(-1);
  	}

		bzero(&sendbuf, 1500);
		bzero(&readbuf, 1500);
		icmp = (struct icmp *) sendbuf;
		icmp->icmp_type = ICMP_ECHO;
		icmp->icmp_code = 0;
		icmp->icmp_id = pid;
		icmp->icmp_seq = seq;
		icmp->icmp_cksum = 0;
		icmp->icmp_cksum = checksum((unsigned short *)icmp, icmplen);

		if(sendto(	sockfd,
								sendbuf, 
								icmplen, 
								0, 
								(struct sockaddr *)&dst,
								sizeof(dst)) == -1){
			perror("sendto failed");
			exit(-1);
		}

		unsigned int fromlen = sizeof(from);
		if((len =recvfrom(sockfd,
								readbuf,
								icmplen, 
								0,
								(struct sockaddr *)&from,
								&fromlen)) == -1){
			perror("recvfrom() failed");
			exit(-1);
		}

		char *ptr = &readbuf[0];
		int iplen;
		ip = (struct ip *) ptr;
		iplen = ip->ip_hl << 2;

		icmp = (struct icmp *) (ptr + iplen);

		if(icmp->icmp_type == ICMP_TIME_EXCEEDED)
			printf(	"%s ttl=%d len=%d icmplen=%d\n", 
							inet_ntoa(from.sin_addr),ttl, len,icmplen);
		else if(icmp->icmp_type == ICMP_ECHOREPLY){
			printf("%s\n", inet_ntoa(from.sin_addr));
			exit(0);
		}
		//seq++;
	}
	
}

unsigned short checksum(unsigned short *addr, int count){
	register long sum;
//	unsigned short sum;
	unsigned short icmpsum;

	while(count > 1){
		sum += (unsigned short) *addr++;
		count -= 2;
	}

	if(count == 1)
		sum += *(unsigned char *) addr;

	while(sum >> 16)
		sum = (sum & 0xffff) + (sum >> 16);

	icmpsum = ~sum;
	return icmpsum;
}

 ,

u0atgKIRznY5 ()

Не пингует сервер

Здравствуйте! Прочитав один мануал решил ограничить ICMP, для защиты от флуда. Выполнил такую команду

iptables -A INPUT -p icmp -j DROP --icmp-type 8

Сервер пинговаться перестал. Через некоторое время понадобилось открыть ICMP (Нужно было пропинговать сервер одному пользователю), я удалил все правила связанные с ICMP. Не помогло, пинги не проходили. Тогда я очистил iptables, и перезапустил сервер, и всё равно мне не помогло, и сервер не пингуется. Может кто сталкивался с таким, и знает решение проблемы? Надеюсь на помощь.

Заранее спасибо!

 , ,

Night_FoX ()