Parece que você tem mal-entendidos significativos sobre como a programação em geral (e C # em particular) funciona e também sobre como o protocolo IP (que é usado para acessar sites da Internet) funciona.
O equívoco do C # é que você acabou de criar um objeto que representa um endereço IP e espera que o computador leia sua mente sobre o significado desse endereço IP. Se algo assim fosse possível, você precisaria usar o endereço IP de alguma forma em seu código. Poderia ser algo assim:
webBrowser1.SourceIpAddress = addr1;
(O código acima não funciona, é apenas um exemplo hipotético.)
O mal-entendido de IP é que você pode forjar seu endereço IP e tudo continuará funcionando. Não é assim que o IP funciona. Quando você envia uma solicitação para alguma página da Web, seu endereço está contido nessa solicitação. Mas há uma boa razão para isso: é para que o destinatário da sua solicitação saiba para onde enviar sua resposta.
O que isto significa é que você poderia falsificar seu endereço IP, mas nunca receberia resposta de ninguém, todas as respostas iriam para o endereço falsificado. Por causa disso, fazer algo assim não é útil.