Reputation: 31
I am trying to write a script that connects to a list of IPs on port 53 - and I want the result to return only open ports. Here is the script I am running below - I have tried grepping and cutting the output but im not sure I am doing this correctly - I cant seem to pipe the script results to a text file either.
#!/bin/bash
for ip in $(seq 200 254); do
nc -v 192.168.11.$ip 53 &
done
I apologise for its simplicity I am new - and if the solution is elsewhere
Upvotes: 1
Views: 2898
Reputation: 6768
If you want all the output of a command to go to a file use &>
. In your example you could use:
#!/bin/bash
for ip in $(seq 200 254); do
nc -v 192.168.11.$ip 53 &>> myFile
done
Then you can manipulate (grep, sed, awk, etc.) myFile
however you want.
Upvotes: 0
Reputation: 199
Check for the command's exit code, it should be zero for a successful connection. Also use the -z option to drop the connection once it has been established.
#!/bin/bash
for ip in $(seq 200 254); do
nc -z 192.168.11.$ip 53
if [ $? -eq 0 ]; then
echo "Hit: 192.168.11.$ip"
fi
done
If you were using nmap instead of netcat, you could have used this:
nmap 192.168.11.200-254 -p 53
PS. If you're trying to determine which hosts run DNS server, you should scan for open 53/udp, not 53/tcp (option -u in netcat)
Upvotes: 2