[Tutor] Dodgey if loop ? FIXED
nick at javacat.f2s.com
nick at javacat.f2s.com
Tue Sep 7 10:32:12 CEST 2004
Thanks for everyones help, this is working now.
The problem was with the keys in portDict.
I was doing
if portDict.has_key(port):
when I should of been doing
if portDict.has_key(str(port)):
I won't be forgetting that for a while ;)
Many thanks again.
Nick.
Quoting nick at javacat.f2s.com:
> Thankyou.
>
> I have since changed the code to use a dict.
> However, I'm getting the same error, Im quite confused :(
>
> The dictionary portDict below is of the form {port_nr:port_name}.
>
> here's the code:
> [code]
> 78 for port in range(sport, eport): # ie range(10,51)
> 79 try:
> 80 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> 81 s.settimeout(2)
> 82 s.connect((host, port))
> 83 print "\n", host, 'is listening on port', port,
> 84 if portDict.has_key(port):
> 85 print "(%s)" %portDict[port],
> 86 else:
> 87 print "Unknown port",
> 88 s.close()
> 89
> 90 except socket.error:
> 91 nogood.append(port)
> [/code]
>
> The else: on line 86 is always true.
> Even if I get rid of the else and change it to
>
> 86 if not portDict.has_key(port):
> 87 print "Unknown port",
>
> It is still always returning "Unknown port".
>
> Here's a run with the 'else' or 'if not portDict.has_key()':
>
> [nickl at netview socket]$ ./scan.py bishop1 10 50
> Trying bishop1 ...
>
> bishop1 is listening on port 13 Unknown port
> bishop1 is listening on port 19 Unknown port
> bishop1 is listening on port 21 Unknown port
> bishop1 is listening on port 23 Unknown port
> bishop1 is listening on port 25 Unknown port
> bishop1 is listening on port 37 Unknown port
> 35 ports were closed
>
> And here's a run with lines 86 and 87 just deleted:
>
> [nickl at netview socket]$ ./scan.py bishop1 10 50
> Trying bishop1 ...
>
> bishop1 is listening on port 13
> bishop1 is listening on port 19
> bishop1 is listening on port 21
> bishop1 is listening on port 23
> bishop1 is listening on port 25
> bishop1 is listening on port 37
> 35 ports were closed
>
> I believe the answer may of been given to me in a previous reply, but I still
> can't get it working.
>
> I apologise for not 'getting' this.
>
> Regards
> Nick.
>
>
>
>
> Quoting Roger Merchberger <zmerch at 30below.com>:
>
> > Rumor has it that nick at javacat.f2s.com may have mentioned these words:
> > [snip]
> >
> > Others have mentioned a problem with your algorithm, but there is an
> > indentation problem with your code:
> >
> > >Here's the offending code:
> > >
> > >[code]
> > >pnumber = str(pnumber) #pnumber is 25 for example
> > >for line in f: # f is '/etc/services' open file
> > > if not line.startswith('#') and len(line) > 10:
> > > p = line.split()[1].split('/')[0]
> > > if p == pnumber:
> >
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > This line should not be indented -- and *might* cause problems, tho
> > I did not test the code...
> >
> > > return line.split()[0] # would return 'smtp'
> > > #else:
> > > #return '?'
> > >[/code]
> >
> > Hope this helps,
> > Roger "Merch" Merchberger
> >
> > --
> > Roger "Merch" Merchberger | A new truth in advertising slogan
> > sysadmin, Iceberg Computers | for MicroSoft: "We're not the oxy...
> > zmerch at 30below.com | ...in oxymoron!"
> >
> > _______________________________________________
> > Tutor maillist - Tutor at python.org
> > http://mail.python.org/mailman/listinfo/tutor
> >
>
>
>
>
> -------------------------------------------------
> Everyone should have http://www.freedom2surf.net/
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
-------------------------------------------------
Everyone should have http://www.freedom2surf.net/
More information about the Tutor
mailing list