한국어 English Chinese Russian

질문&답변 게시판 / 기술지원



SSL 암호화로 사용자의 입력정보가 보호되고 있습니다.
No. 2951 Re: UDP 포트에 의한 수신 IP 주소 및 port 를 알 수 있는 방법이 있을 까요? 2023-12-11

안녕하세요. 솔내시스템 기술지원팀입니다.

UDP 수신시 상대방 IP 정보와 port를 알 수 있는 방법은 pid_recvfrom 함수를 사용하면 됩니다.
함수 인자는 아래와 같습니다.
* $pid - the network device’s PID
* &$buf - the destination buffer will be saved to
* $len - the maximum number of bytes to receive
It receives up to the size of the $buf if this field is omitted (integer: 8 bytes, string: MAX_STRING_LEN)
* $flags - This field should be 0
* &$addr - the peer host’s IP address
* &$port - the peer host’s UDP port number

아래 샘플 코드 참고하세요.

감사합니다.


$Port = 161;
$community = "public";

// 변수 추가
$rbuf = "";
$dstaddr = "";
$dstport = 0;

$pid = pid_open("/mmap/udp0"); // 0번 UDP 열기
pid_bind($pid, "", $Port); // 바인딩

while(1) // 무한 루프
{
$srcaddr = pid_ioctl($pid, "get srcaddr"); // 송신IP 확인
$srcport = pid_ioctl($pid, "get srcport"); // 송신 포트 확인

$rxlen = pid_ioctl($pid, "get rxlen"); // 수신 데이터 크기 확인

//$dstaddr = pid_ioctl($pid, "get dstaddr"); // 수신IP 확인
//$dstport = pid_ioctl($pid, "get dstport"); // 수신 포트 확인

if($rxlen > 0)
{
// 데이터 수신
pid_recvfrom($pid, $rbuf, $rxlen, 0, $dstaddr, $dstport);

printf("srcaddr = $srcaddr / srcport = $srcport / rxlen = $rxlen / dsaddr = $dstaddr / dsport = $dstport
");

// 루프백
//$slen = pid_sendto($pid, $rbuf, $rxlen, 0, $dstaddr, $dstport); // 데이터 송신
}

usleep(100000);
}

pid_close($pid);
?>


> 이종범 wrote:
> ------------------------------------
> $Port = 161;
$community = "public";

$pid = pid_open("/mmap/udp0"); // 0번 UDP 열기
pid_bind($pid, "", $Port); // 바인딩

while(1) // 무한 루프
{
$srcaddr = pid_ioctl($pid, "get srcaddr"); // 송신IP 확인
$srcport = pid_ioctl($pid, "get srcport"); // 송신 포트 확인


$rxlen = pid_ioctl($pid, "get rxlen"); // 수신 데이터 크기 확인

$dstaddr = pid_ioctl($pid, "get dstaddr"); // 수신IP 확인
$dstport = pid_ioctl($pid, "get dstport"); // 수신 포트 확인


if($rxlen > 0)
{
printf("srcaddr = $srcaddr / srcport = $srcport / rxlen = $rxlen / dsaddr = $dsaddr / dsport = $dsport
");

}

usleep(100000);
}

pid_close($pid);
?>


==> 이때 결과는 제품(PHPOC 블랙 P4S-341)의 IP를 192.168.0.110 으로 설정시

srcaddr = 192.168.0.110 / srcport = 161 / rxlen = 46 / dstaddr = 0.0.0.0 / dstport = 0

이렇게 나오게 됩니다.

이때 수신 된 IP (dstaddr = 0.0.0.0) , port (dstport =0 ) 이 나오게 되는데

pid_ioctl($pid, "set dstaddr 10.1.0.2"); // 통신 상대방 IP주소 설정
pid_ioctl($pid, "set dstport 1470"); // 통신 상대방 포트번호 설정
를 설정 하지 않을 경우

수신 된 IP 및 Port 를 확인 할 수 있는 방법이 있을 까요?

글쓴이 솔내시스템(주) 업체명


NO Subject Name Date Read
2950 UDP 포트에 의한 수신 IP 주소 및 port 를 알 수 있는 방법이 있을 까요? 이종범 2023-12-10 137
2951 Re: UDP 포트에 의한 수신 IP 주소 및 port 를 알 수 있는 방법이 있을 까요? 솔내시스템(주) 2023-12-11 102