2013-07-31 3 views
0

나는 목적이하는 것입니다 서버 응용 프로그램 ..소켓이나 패킷 캡처를 사용해야합니까? 펄

1 '수신'TCP 및/또는
이 내용을 해석 UDP 패킷 (예 : 헤더 값)

에 대한 기초를 투기하기 위해 노력하고있어

세부 정보를 추가하려면이 서버에서 '한 모금 초대'를 받고 '302 리디렉션'으로 응답하십시오.

Net :: Pcap 및 perl에 대한 경험이 있으며 필터링 된 패킷에 대해 루핑을 수행하고 디코딩 한 다음 Net :: SIP와 같은 것을 사용하여 응답 할 수 있음을 알고 있습니다.

그러나 내가 필요로하지 않는이 두 모듈/응용 프로그램에는 많은 팽창이 있습니다. 서버가 과부하 상태가되고 TCPDUMP를 자체 서버에서 실행하면 서버로드로 인해 커널에서 패킷이 손실되므로 걱정할 필요가 없습니다. (

같은 결과를 얻을 수 있어야합니까? 예를 들어 IO :: Socket을 사용하여 소켓에서 '수신 대기'하고 패킷을 디코딩하는 중입니까?

불행히도 디버깅을 통해 IO :: Socket이 원시 패킷을 볼 수있는 기회를 줄 수 있습니까? 자동으로 읽을 수있는 형식으로 메시지를 디코딩

TL; DR을!. 내가, SIP는 초대를 많이 포착 머리 값을 분석하고, SIP 302 리디렉션으로 응답 할 일이다 tcpdump (Net :: Pcap을 통해)를 사용하는 것보다 더 좋은 방법이 있습니까?

감사합니다, 무스

+1

'IO :: Socket'은 Perl의 내장 소켓 기능을 둘러싼 OOP wrapper 일뿐입니다. [OSI-Transport layer] (http://en.wikipedia.org/wiki/Transport_layer)에서 보입니다. [네트워크 계층] (http://en.wikipedia.org/wiki/Network_layer)에 관심이 있습니다. – mob

답변

1

이를 달성하기 위해 (NET : PCAP를 통해)는 tcpdump를 사용하는 것보다 더 좋은 방법이 있나요?

예. libpcap을 사용하면 (그 질문에서 tcpdump 대신에 의미 한 것입니다) 입니다. TCP 기반 서비스를 구현하는 방법은 TCP의 대부분을 직접 구현해야하기 때문에 (libpcap는 원시 네트워크 계층 패킷을 제공합니다), 패킷 프로그램 때문에, 이 컴퓨터에 인터넷 프로토콜 스택에 전달 얻을 것이다 가져옵니다

TCP 포트에서 수신 컴퓨터에 아무것도 존재하지 않는 경우는 다른 컴퓨터가 연결을 시도하는
  • , 연결 요청은 TCP 코드에서 RST를 가져오고 연결 시도가 실패했다고 생각합니다.
  • 해당 포트에서 수신 컴퓨터에 무언가가 경우, 그것은 아마도 연결을 받아 들일 것이다, 그리고 당신의 프로그램이 모두 시도는 아마 TCP를 혼동 할 다른 컴퓨터와 통신하는 것 여러 가지 나쁜 일들이 일어날 수 있습니다.

그것은 UDP에 대한별로 더 나은 :

  • 다른 컴퓨터가 연결을 시도하는하는 UDP 포트에서 수신 컴퓨터에 아무것도 존재하지 않는 경우, 연결 요청이 아마 얻을 것이다 ICMP 포트에 연결할 수 없음 UDP 코드의 메시지로 연결 시도가 실패했다고 생각할 수 있습니다.
  • 해당 포트에서 수신 컴퓨터에 무언가가 경우, 그것은 아마도 연결을 받아 들일 것이다, 그리고 당신의 프로그램이 모두 시도는 아마 SIP를 혼동 할 다른 컴퓨터와 통신하는 것 여러 가지 나쁜 일들이 일어날 수 있습니다.

IO:Socket 아마도 원시 패킷을주지 않을 것이다, 그리고는 좋은 일이다; 자신의 IP 및 TCP/UDP 스택을 구현할 필요가 없습니다. 컴퓨터에 redirect server을 구현하는 것이 목표라면 원시 패킷을받을 필요가 없습니다. 시스템의 IP/TCP/UDP 스택에 의해 수행되는 모든 하위 레벨 처리와 함께 SIP INVITE를 수신하려고합니다.

이미 시스템에 SIP 구현이 있고이를 위해 "방화벽"으로 작동하려는 경우 일부 INVITE의 경우 302 리디렉션을 보내고 컴퓨터의 SIP 구현이 문제의 INVITE를 본 적이 있다면 특정 OS가 방화벽을 구현하는 데 사용하는 것과 동일한 메커니즘을 사용해야합니다. 필자가 아는 한 이러한 메커니즘을위한 libpcap과 같은 래퍼는 없습니다.

+0

환상적입니다. 답장을 보내 주셔서 대단히 감사합니다! 그것은 올바른 방향으로 나를 가리켰다. 정말 감사합니다. – BIGMOOSE