Разобравшись с тем, как реализовать ping на php, передо мной стала необходимость реализовать также и traceroute, используя сокеты.
Однако, при изучении возможностей php при работе с сокетами выяснилось, что там невозможно установить ttl для пакета.
Так что на повестке дня два вопроса:
1. Есть ли все-таки какие-нибудь способы установки этого ttl?
2. Можно ли как-то по-другому реализовать traceroute? Я тут наткнулся на документ RFC1393, судя по которому можно установить в ICMP пакете type=0x1E, сигнализирующий о том, что этот пакет используется для traceroute. Но как с этим работать я так и не понял. Может, кто знает?
Спустя 1 день, 2 часа, 46 минут, 1 секунда (29.03.2008 - 18:08) lenich написал(а):
Цитата
SOCK_RAW
Provides raw network protocol access. This special type of socket can be used to manually construct any type of protocol. A common use for this socket type is to perform ICMP requests (like ping, traceroute, etc).
Provides raw network protocol access. This special type of socket can be used to manually construct any type of protocol. A common use for this socket type is to perform ICMP requests (like ping, traceroute, etc).
http://ru2.php.net/manual/ru/function.socket-create.php
Не подойдет?
Спустя 3 часа, 30 минут, 43 секунды (29.03.2008 - 21:38) lucius написал(а):
Конечно, не подойдет. Я тоже читал мануал по этим функциям. Но вообще-то для того, чтобы написать программу типа traceroute надо менять ttl пакета. А функции работы с сокетами у пхп не позволяют менять IP заголовок пакета.
Спустя 19 минут, 40 секунд (29.03.2008 - 21:58) lenich написал(а):
странно. там же прям написано traceroute - рав сокеты вроде как раз и отличаются от не рав тем, что позволяют менять йп. может вы как то не так его хотите реализовать? вы там где нашли что заголовок нельзя менять?
вот на это натыкались кстати? http://pear.php.net/package/Net_Traceroute
вот на это натыкались кстати? http://pear.php.net/package/Net_Traceroute
Спустя 6 минут, 24 секунды (29.03.2008 - 22:05) lucius написал(а):
Цитата(lenich @ 29.3.2008, 21:58) [snapback]35932[/snapback]
странно. там же прям написано traceroute. может вы как то не так его хотите реализовать? вы там где нашли что заголовок нельзя менять?
вот на это натыкались кстати? http://pear.php.net/package/Net_Traceroute
вот на это натыкались кстати? http://pear.php.net/package/Net_Traceroute
на заборе тоже написано. Но, чтобы осуществить traceroute надо менять ttl у пакетов. Единственной функцией, которая могла бы это делать является socket_setopt. Однако, среди допустимых параметров сокета срока жизни пакета нет.
Приведенный Вами пакет осуществляет traceroute через вызов функции exec, а вовсе не через сокеты, что как Вы понимаете, меня не устраивает.
Спустя 23 часа, 12 минут, 29 секунд (30.03.2008 - 20:17) philimon написал(а):
Думаю нужно узнать как формировать пакет "вручную". И, как мне кажется, с помощью функций socket_write(), socket_sendto() можно изменить любой параметр пакета
_____________
теоретически, невозможно выбросить черную дыру в окно с помощью ножки от стола