bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1222回复:2

怎样得到源IP地址和目标IP地址???

楼主#
更多 发布于:2002-10-15 11:15
小弟是新手,恳请各位大虾多指点!!
小弟弄不明白,怎样才能从下面的代码中分离出源IP地址和目标IP地址,或还有更好的办法请各位指点一二。能教会我,小弟会给分的。
部分代码如下:
***********************************************************
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status = 0;
    ULONG i;

DBGPRINT(\"DriverEntry Loading...\\n\");

DriverObject->DriverUnload = PacketUnload; //卸载函数

/*
 利用循环语句将驱动程序所有的IRP请示函数指针指向PacketDispatch函数,
      这样所有的IRP请示将经过自已的函数PacketDispatch中转
*/
    for (i=0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
    {
DriverObject->MajorFunction = PacketDispatch;
    }

/*
      调用自定义函数TCPFilter_Attach,将此驱动程序提款挂接到TCP/IP协议驱动程序上
*/
status = TCPFilter_Attach(DriverObject,RegistryPath);

return status;
}

//自已的函数PacketDispatch中转函数
NTSTATUS
PacketDispatch(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
)
{
NTSTATUS RC = STATUS_SUCCESS;
PTDIH_DeviceExtension pTDIH_DeviceExtension;
PIO_STACK_LOCATION IrpStack;
PIO_STACK_LOCATION NextIrpStack;

pTDIH_DeviceExtension
= (PTDIH_DeviceExtension )(DeviceObject->DeviceExtension);

IrpStack = IoGetCurrentIrpStackLocation(Irp);

switch(IrpStack->MajorFunction)
{
case IRP_MJ_CREATE:
DBGPRINT(\"PacketDispatch(IRP_MJ_CREATE)...\\n\");
break;
case IRP_MJ_CLOSE:
DBGPRINT(\"PacketDispatch(IRP_MJ_CLOSE)...\\n\");
break;
case IRP_MJ_CLEANUP:

.
.
.
.
.
case IRP_MJ_DEVICE_CONTROL:
DBGPRINT(\"PacketDispatch(IRP_MJ_DEVICE_CONTROL)...\\n\");
break;
default:
DBGPRINT(\"PacketDispatch(OTHER_MAJOR_FUNCTION)...\\n\");
break;
}

if (Irp->CurrentLocation == 1)
{
ULONG ReturnedInformation = 0;

DBGPRINT((\"PacketDispatch encountered bogus current location\\n\"));

RC = STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Status = RC;
Irp->IoStatus.Information = ReturnedInformation;
IoCompleteRequest(Irp, IO_NO_INCREMENT);

return( RC );
}

NextIrpStack = IoGetNextIrpStackLocation(Irp);
*NextIrpStack = *IrpStack;

IoSetCompletionRoutine(Irp,PacketCompletion,NULL,TRUE,TRUE,TRUE);

return IoCallDriver(pTDIH_DeviceExtension->LowerDeviceObject,Irp);
}



[编辑 -  10/16/02 by  bhjinhou]
ooze
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2004-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-15 11:19
有没有nt4的ddk?里面有个packet离子,估计是在Irpstack里面,
真搞不明白,还可以用softice在你的 dispatch里面设端点,看irpstack的内容吧

[编辑 -  10/15/02 by  ooze]
Be a true hacker of Windows NT alike
ooze
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2004-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-15 11:58
我说的哪个例子,里面read.c的函数
PacketReceiveIndicate你看下
Be a true hacker of Windows NT alike
游客

返回顶部