Monday, November 2, 2009

merge two files

To convenient merge two files use the diff utility with the -D option.
The command will be like:
diff -D _NEWFILE_ old_file.ext new_file.ext >result_file_to_edit.ext


With that -D option the result file will contain the C-preprocessor code, like

#ifdef _NEWFILE_
content only the new_file.ext
#endif /* _NEWFILE_ */

#ifndef _NEWFILE_
content only the old_file.ext
#endif /* _NEWFILE_ */

or

#ifndef _NEWFILE_
content only the old_file.ext
#else /* _NEWFILE_ */
content only the new_file.ext
#endif /* _NEWFILE_ */

Then use a text editor to manually search for the _NEWFILE_ string and modify the text
as you think it should be.

Sunday, November 1, 2009

ftp thru a NAT firewall

I always was wondering, how ftp data connection gets through a firewall with NAT.
A ftp client on a machine with local IP (192.168.x.x) sends its own local address, like:
---> PORT 192,168,0,2,150,117
but the server still manages to establish the data connection to the client machine.
The answer to this question is simple - the NAT router works also on the application level and understands the ftp commands. When it sees the "PORT" command in the control connection, it translates the internal address to the external and adds a temporary record to the firewall table.

It's funny, but my simple cheap WiFi all-in-one box at home does the job when the ftp commands are upper cased and ignores it when it lowercased.

Good article about the subject here: