패킷 삽입 함수

설명선 드라이버는 다음 WFP 함수를 호출하여 보류 중이거나 수정된 패킷 데이터를 TCP/IP 스택에 삽입할 수 있습니다. 데이터를 삽입할 수 있는 적용 가능한 계층과 가능한 대상은 다음 표에 나와 있습니다.

삽입 함수 적용 가능한 계층 대상

FwpsInjectForwardAsync0

네트워크 계층

전달 데이터 경로

FwpsInjectNetworkReceiveAsync0

네트워크 계층

수신 데이터 경로

FwpsInjectNetworkSendAsync0

네트워크 계층

데이터 보내기 경로

FwpsInjectTransportReceiveAsync0

전송, 데이터그램 데이터, ICMP 오류 또는 ALE 계층의 패킷 데이터

수신 데이터 경로

FwpsInjectTransportSendAsync0

전송, 데이터그램 데이터, ICMP 오류 또는 ALE 계층의 패킷 데이터

데이터 보내기 경로

FwpsStreamInjectAsync0

TCP 데이터 세그먼트

데이터 스트림

또한 FwpsQueryPacketInjectionState0 함수는 패킷 데이터의 삽입 기록을 검사하는 데 사용됩니다.

설명선이 삽입 함수에 필요한 모든 필요한 정보를 제공할 수 있고 net 버퍼 목록에 삽입 함수에 필요한 형식이 있는 경우 계층 간 삽입이 사용됩니다. 예를 들어 설명선은 전달 경로에서 패킷을 캡처하고, 대상 주소를 로컬 컴퓨터의 패킷으로 수정하고, FwpsInjectTransportReceiveAsync0 을 호출하여 패킷을 로컬 컴퓨터의 TCP/IP 스택으로 리디렉션할 수 있습니다.

스트림(TCP 데이터) 주입을 제외하고 들어오는 패킷을 스택 및 WFP 계층의 "아래쪽"에서 다시 입력하고, 삽입된 나가는 패킷은 스택 및 WFP 계층의 "위쪽"에서 다시 입력됩니다. 예를 들어 들어오는 데이터그램 데이터 계층에서 삽입된 UDP 패킷은 스택을 다시 입력하고 네트워크 계층, 전송 계층, ALE 수신 또는 수락 계층(선택 사항) 및 데이터그램 데이터 계층으로 다시 트래버스합니다. 나가는 네트워크 계층에서 삽입된 다른 UDP 패킷은 스택을 다시 입력하고 ALE(선택 사항), 데이터그램 데이터 및 전송 계층을 트래버스한 다음 네트워크 계층으로 다시 트래버스합니다.

FwpsInjectTransportReceiveAsync0 은 이전에 IPsec 확인을 통과했기 때문에 다시 생성된 패킷에 대한 IPsec 처리를 자동으로 무시합니다.

WFP 설명선 드라이버에 의해 삽입된 패킷은 패킷을 수정하면 원래 필터 조건이 누락되는 경우를 제외하고 설명선에 다시 표시됩니다. WFP는 설명선에 의해 패킷을 삽입(또는 이전에 삽입)했는지 여부를 쿼리하기 위해 설명선에 대한 FwpsQueryPacketInjectionState0 함수를 제공합니다. 무한 반복을 방지하려면 설명선에서 자체 삽입 패킷을 허용해야 합니다.

설명선은 IP 패킷을 수정한 후 IP 또는 전송 계층 체크섬 또는 둘 다를 조정해야 합니다. 설명선은 IPv4 패킷을 통해 UDP의 체크섬을 0으로 설정할 수 있습니다. 전송 계층 체크섬 오프로드와 호환되고 전체 체크섬과 의사 체크섬 계산을 적절하게 조정하려면 설명선에서 다음 논리를 사용할 수 있습니다.

NDIS_TCP_IP_CHECKSUM_PACKET_INFO ChecksumInfo;
 ChecksumInfo.Value = 
 (ULONG) (ULONG_PTR)NET_BUFFER_LIST_INFO(
 NetBufferList,TcpIpChecksumNetBufferListInfo);

ChecksumInfo.Transmit.NdisPacketTcpChecksum이 TRUE이면 TCP 보내기 작업이 오프로드됩니다. ChecksumInfo.Transmit.NdisPacketUdpChecksum이 TRUE이면 UDP 보내기 작업이 오프로드됩니다.

WINDOWS Vista SP1(서비스 팩 1) 및 Windows Server 2008에서 inMetaValues-headerIncludeHeaderLength>가 0보다 큰 경우 나가는 패킷은 IP 헤더를 포함하는 RAW 송신 다시 연결입니다. SP1 및 Windows Server 2008을 사용하여 Windows Vista에 대한 IP 헤더를 포함하는 RAW 보내기 다시 연결을 수행하려면 복제된 패킷을 inMetaValues-headerIncludeHeaderLength>의 양만큼 후퇴하고 새로 확장된 공간에 inMetaValues-headerIncludeHeader>를 복사해야 합니다. 그런 다음 패킷의 순 버퍼 목록과 함께 FwpsInjectTransportSendAsync0을 사용하고 FWPS_TRANSPORT_SEND_PARAMS0 매개 변수를 NULL로 설정합니다. 순 버퍼 목록의 퇴각 작업에 대한 자세한 내용은 리트리트 및 고급 작업을 참조하세요.

참고 원시 송신 작업의 경우 순 버퍼 목록에는 단일 net 버퍼만 포함되어야 합니다. 순 버퍼 목록에 둘 이상의 순 버퍼가 포함된 경우 순 버퍼 목록을 일련의 순 버퍼 목록으로 변환해야 하며 계열의 각 에는 단일 net 버퍼가 포함되어야 합니다. 순 버퍼 목록 관리에 대한 자세한 내용은 NET_BUFFER 아키텍처를 참조하세요.