сокеты и бинд

Bulbazavr

Guest
сокеты и бинд

Есть сервер с IP 62.x.x.12, на нем хоститься сайт и для этого сайта выделен IP 62.x.x.15, все входящие запросы приходят на
62.x.x.15, а исходящие соединения идут с основного IP сервера(62.x.x.12).Нужно как сказали при помощи bind установить нужный Ip для созданного сокета в скрипте. Скрипт использую с php.spb.ru для отправки сообщений на icq. Что нужно сделать чтобы мой IP определялся как 62.x.x.15 ? помогите пожалуйста, очень нужно.
 

young

Новичок
тут дело не в PHP.
Должен быть правильно настроен роутинг.
 

Bulbazavr

Guest
В тех поддержке сказали:
"Вы можете сами установить нужный IP-адрес при
использовании функции bind для созданного сокета в скрипте."
вот я теперь и думаю каким образом это сделать :((
 

young

Новичок
"Вы можете сами установить нужный IP-адрес при
использовании функции bind для созданного сокета в скрипте."
Попробуй более точно объяснить проблему суппорту.
bind тебе поможет если бы ты создавал сокет-сервер
А для сокет-клиента, которым ты являешься это тебе никак не поможет
 

ys

отодвинутый новичок
Автор оригинала: young
Попробуй более точно объяснить проблему суппорту.
bind тебе поможет если бы ты создавал сокет-сервер
А для сокет-клиента, которым ты являешься это тебе никак не поможет
Поможет.
http://ru.php.net/manual/en/function.socket-bind.php

$res = socket_bind($sd,62.x.x.15);

$sd - id сокета

Во всяком случае в Сишных программах так работает, php я думаю просто польузет стандартный bind();
 

ys

отодвинутый новичок
Слезь с танка да попробуй, я вот не поленился и попробовал.

имею адрес 194.87.*.6

Накинул для верности второй:
ifconfig lo0 alias 194.87.*.7

Код:
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,"194.87.*.7");
socket_connect($socket,"195.*.25.1","1022");
На 195.*.25.1 наблюдаю при помощи tcpdump как при выполнении скрипта прибегают на порт 1022 пакетики с адреса 194.87.*.7 .
 

Bulbazavr

Guest
Большое спасибо. Теперь вопрос как мне все это использовать в этом коде ?

class socksender
{
var $User_Agent="Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)";
var $Accept_Encoding="gzip, deflate";
var $method="POST";
var $protocol="HTTP/1.0";
var $send2port=80;

function send($host, $send2url, $referer, $data)
{
$http_query="";
while (list($name,$value)=each($data))
{
$tmp_data[]=urlencode($name)."=".urlencode($value);
}
$enc_data=implode("&", $tmp_data);
$len_data=strlen($enc_data);
if ($this->method=="POST")
{
$http_query=
$this->method." ".$send2url." HTTP/1.0\r\n".
"Referer: ".$referer."\r\n".
"Content-Type: application/x-www-form-urlencoded"."\r\n".
"Content-Length: ".$len_data."\r\n".
"Host: ".$host."\r\n".
"Accept: */*\r\n".
"Accept-Encoding: ".$this->Accept_Encoding."\r\n".
"Connection: Keep-Alive"."\r\n".
"User-Agent: ".$this->User_Agent."\r\n"."\r\n".
$enc_data;
flush();
$fs = fsockopen($host, $this->send2port, &$errno, &$errstr, 30);
if (!$fs) { die ("unable open socket: $errstr ($errno)");}
fputs ($fs, $http_query);
while($r=fgets ($fs, 20048)) $rt.=$r;
fclose($fs);
flush();
}
return $rt;
}
}
?>
 

ys

отодвинутый новичок
Можно например попробовать заменить все что начинается
с первого flash() до второго flash(), заменить на следующее:


Код:
$sf=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if ($sf == false) { 
  die ("unable open socket: " .  socket_strerror(socket_last_error());
} 

if( socket_bind($sf, $this->my_addr) == false) {
  die ("unable to bind socket: " .  socket_strerror(socket_last_error());
}

if( socket_connect($sf, $host, $this->send2port) == false) {
  die ("unable to connect: " .  socket_strerror(socket_last_error());
}


$sz = socket_write($sf, $http_query, strlen($http_query));
if($sz == false) {
  die ("write erorr: " .  socket_strerror(socket_last_error());
}

while(($r = socket_read($sf, 512)) != false) {
  $rt .= $r;
}
socket_close($sf);

В начале класса задаем переменную my_addr с твоим IP адресом, который ходит наружу.
 

Bulbazavr

Guest
В принципе работает, но не передаются параметры :((, а запрос приходит с нужного IP
 

ys

отодвинутый новичок
Какие параметры куда и кому не передаются?
 
Сверху