mirror of
https://github.com/MikeWang000000/n4.git
synced 2026-10-19 16:16:33 +00:00
unstrict peer ip check
Some client has different external IP to peer and server. this option disable the restriction, making punching success when recieving package success. Authored-by: Yang Chen <yang.chen@linuxe.org> Reported-by: Yang Chen <yang.chen@linuxe.org>
This commit is contained in:
@@ -238,6 +238,7 @@ class N4Client:
|
||||
src_port_start : int
|
||||
src_port_count : int
|
||||
peer_port_offset : int
|
||||
allow_cross_ip : bool
|
||||
sock : Optional[socket.socket]
|
||||
pool : List[socket.socket]
|
||||
|
||||
@@ -245,13 +246,15 @@ class N4Client:
|
||||
ident: bytes,
|
||||
server_host: str, server_port: int,
|
||||
src_port_start: int, src_port_count: int,
|
||||
peer_port_offset: int) -> None:
|
||||
peer_port_offset: int,
|
||||
allow_cross_ip: bool) -> None:
|
||||
self.ident = ident
|
||||
self.server_host = server_host
|
||||
self.server_port = server_port
|
||||
self.src_port_start = src_port_start
|
||||
self.src_port_count = src_port_count
|
||||
self.peer_port_offset = peer_port_offset
|
||||
self.allow_cross_ip = allow_cross_ip
|
||||
self.sock = None
|
||||
self.pool = []
|
||||
|
||||
@@ -328,8 +331,11 @@ class N4Client:
|
||||
raise N4Error.PunchFailure
|
||||
|
||||
recv_punch_pkt, recv_peer = r[0].recvfrom(0xffff)
|
||||
if recv_peer[0] == peer[0] and recv_punch_pkt == punch_pkt:
|
||||
break
|
||||
if recv_punch_pkt == punch_pkt:
|
||||
if recv_peer[0] == peer[0]:
|
||||
break
|
||||
elif self.allow_cross_ip:
|
||||
break
|
||||
|
||||
logging.info(" => Punch from peer ")
|
||||
|
||||
@@ -362,6 +368,7 @@ def cli_main():
|
||||
port = args.b
|
||||
count = args.n
|
||||
offset = args.o
|
||||
check_peer = args.x
|
||||
while True:
|
||||
try:
|
||||
n4c = N4Client(
|
||||
@@ -370,7 +377,8 @@ def cli_main():
|
||||
server_port=server_port,
|
||||
src_port_start=port,
|
||||
src_port_count=count,
|
||||
peer_port_offset=offset
|
||||
peer_port_offset=offset,
|
||||
allow_cross_ip=check_peer
|
||||
)
|
||||
logging.info("==================")
|
||||
logging.info("Source port: %d-%d" % (port, port+count))
|
||||
@@ -435,6 +443,9 @@ def main() -> None:
|
||||
group.add_argument(
|
||||
"-p", type=int, help="port of N4 server", default=1721
|
||||
)
|
||||
group.add_argument(
|
||||
"-x", action="store_true", help="allow peer ip NOT get from server"
|
||||
)
|
||||
args = argp.parse_args()
|
||||
if args.s:
|
||||
srv_main()
|
||||
|
||||
Reference in New Issue
Block a user