winpCap 修改UDP包头的源地址
内网和本机测试都通过了, 到了真实网络IP的UDP上, 没更改掉IP.,
例如想模拟 1.1.1.1 向某端口发UDP包
szLMAC 网卡MAC
szGMAC 为网关 MAC
SendARP 成功, pEth->ether_dhost会更改为内网地址.
否则 pEth->ether_dhost 为网关MAC
typedef struct tagEthHdr
{
u_char ether_dhost[MAC_ALEN];
u_char ether_shost[MAC_ALEN];
u_short ether_type;
}EthHdr;
void FixMAC(ULONG sip, ULONG dip,EthHdr* pEth)
{
pEth->ether_type = htons( 0x0800);
memcpy( pEth->ether_shost,szLMAC,MAC_ALEN);
if(dip == m_sip){ // 本机到本机,ok
memcpy( pEth->ether_dhost,szLMAC,MAC_ALEN);
}
else
{
ULONG nMacSize = MAC_ALEN;
long destIP = htonl(dip);
SendARP( htonl(destIP),NULL,pEth->ether_dhost,&nMacSize);
if( !nMacSize)
memcpy( pEth->ether_dhost,szGMAC,MAC_ALEN);
// 本机到局域网,ok
}
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)